C++ 将字符*转换为数字的最快方法是什么?

C++ 将字符*转换为数字的最快方法是什么?,c++,C++,将字符*转换为数字的最快方法是什么?我需要将4个字符转换为int,或者将两个字符转换为短int。 我试着 char* ar; //fill ar with values int x= ar[1]+1[2]<<8+ar[3]<<16+ar[4]<<24; // ar[0] number of chars for number (short 2, int 4) 但结果总是零。为了解释这一点,我将数字转换为字符*并通过网络发送,另一方面,我尝试反向处理。使用a

将字符*转换为数字的最快方法是什么?我需要将4个字符转换为int,或者将两个字符转换为短int。 我试着

char* ar;
//fill ar with values  
int x= ar[1]+1[2]<<8+ar[3]<<16+ar[4]<<24; // ar[0] number of chars for number (short 2, int 4)
但结果总是零。为了解释这一点,我将数字转换为字符*并通过网络发送,另一方面,我尝试反向处理。

使用atoi函数:

#include <iostream>
#include <cstdlib>

int main ()
{
  int i;
  char * num = "325";
  i = atoi (num);
  std::cout << i << std::endl;
  return 0;
}
不幸的是,我这里没有C++11编译器,所以我不能尝试使用std::stoi的variant

编辑2

我做了一些快速的研究,下面是建议使用strtol函数的主题:

C++操作符优先为:

(ar[1]+1[2]) << (8+ar[3]) << (16+ar[4]) << 24

难怪总是0。使用帕伦斯。您也可以使用|,但我还是建议使用parens。

根据您的示例代码进行猜测,我认为这就是您要寻找的,您确实有一个void*而不是char*


编码最快还是运行最快?顺便说一句,sizeofint不能保证为4,也不能保证sizeofshort为2。您几乎可以肯定在没有首先使用探查器的情况下优化了代码。过早优化的弊端。字符串转换只应在转换通过I/O、文件、网络流、用户界面等获取或传递的数据时发生。I/O总是比转换昂贵得多。你将从花费几微秒的东西上刮去几纳秒。牺牲代码可读性和稳定性,获得0.1%的性能增益。测量三次,切割一次。不,不要使用atoi,失败时不会报告错误。如果你让一个C++11编译器使用std::stoi,或者使用stringstream或boost::lexical_cast。基于OPs代码,我不认为他试图将1转换成整数1,我认为他只是试图以一种方式编码4个或2个字符,以后可以再转换成相同的4或2个字符。
ar[1]+1[2]<<8+ar[3]<<16+ar[4]<<24; 
(ar[1]+1[2]) << (8+ar[3]) << (16+ar[4]) << 24
unsigned int getValue(char* c) {
    if (c[0] == 0x2) {
        return *(reinterpret_cast<unsigned short*>(c + 1));
    } else if (c[0] == 0x4) {
        return *(reinterpret_cast<unsigned int*>(c + 1));
    } else {
        assert(false);
    }
}

int main() {

    char c[5];
    char d[5];

    c[0] = 0x2;
    d[0] = 0x4;

    char* cStart = &c[1];
    *(reinterpret_cast<unsigned short*>(cStart)) = 1000;

    char* dStart = &d[1];
    *(reinterpret_cast<unsigned int*>(dStart)) = 1123124;

    std::cout << getValue(c) << std::endl;
    std::cout << getValue(d) << std::endl;

    return 0;
}