我有一个字符串 x 需要转换为十六进制格式:
char x[5];
x[0]='0';
x[1]='1';
x[2]='0';
x[3]='1'; //x contains value of 0xA or decimal 10;
x[4]='\0';
现在如何将其转换并将其存储到无符号整数变量中,以便该变量的值为 0xA;
谢谢。
我有一个字符串 x 需要转换为十六进制格式:
char x[5];
x[0]='0';
x[1]='1';
x[2]='0';
x[3]='1'; //x contains value of 0xA or decimal 10;
x[4]='\0';
现在如何将其转换并将其存储到无符号整数变量中,以便该变量的值为 0xA;
谢谢。
为什么x中的字符串顺序相反?
char x[5] = {'1', '0', '1', '0' };
unsigned int result = 0;
int i = 0;
while(x[i] != 0)
{
result = result * 2 + x[i]-'0';
}
似乎数字是以相反的方向存储的,这对于人类来说是不自然的阅读方式,但是一种非常自然的方式来表示数字,因为索引是指应该应用的 2 的幂。
没有现有的库可以为您进行转换,您需要自己编写代码来解析它:
int i = 0;
unsigned int result = 0;
while (x[i]) {
result |= (x[i] == '1') << i;
i++;
}
char *x = "0101";
不等于 0xA 或十进制 10。二进制 '1010' 会,也许这就是你的意思?
转换字符串表示的数字的简单方法是 strtol,以及 atoi 等许多其他函数。strtol 至少允许提供一个基数。
http://www.cplusplus.com/reference/clibrary/cstdlib/strtol
就像是:
unsigned long val = strtol(x, NULL, 2);