C++ 将字符*转换为数字的最快方法是什么?
将字符*转换为数字的最快方法是什么?我需要将4个字符转换为int,或者将两个字符转换为短int。 我试着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
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;
}