将char *转换为数字的最快方法是什么?我需要将4个字符转换为int,或将两个字符转换为short 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)
但是结果总是为零。(解释我将数字转换为char *而不是通过网络发送,另一方面我试图逆转进程)。
答案 0 :(得分:4)
使用atoi
功能:
#include <iostream>
#include <cstdlib>
int main ()
{
int i;
char * num = "325";
i = atoi (num);
std::cout << i << std::endl;
return 0;
}
修改强>
正如评论中所指出的,你不应该使用atoi
函数,因为你无法看到转换中是否有错误(如果失败,atoi
将返回0,但是这个案例怎么样{ {1}})。在使用C ++时,可以选择使用int i = atoi("0");
stringstream
不幸的是,我这里没有C ++ 11编译器,因此我无法使用#include <iostream>
#include <sstream>
using namespace std;
int main()
{
char * num = "3443";
int result;
stringstream ss;
ss << num;
ss >> result;
if (!ss.fail()) {
cout << result << endl;
}
return 0;
}
尝试变体。
修改2
我做了一些快速研究,这里的主题建议使用std::stoi
函数:How to parse a string to an int in C++?
答案 1 :(得分:3)
ar[1]+1[2]<<8+ar[3]<<16+ar[4]<<24;
使用c ++运算符优先级是:
(ar[1]+1[2]) << (8+ar[3]) << (16+ar[4]) << 24
难怪它永远是0.使用parens。您也可以使用|
,但无论如何我都建议使用parens。
答案 2 :(得分:2)
根据您的示例代码进行猜测我认为这正是您所寻找的(您真的有void*
而不是char*
???)
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;
}