【发布时间】:2013-01-21 14:38:49
【问题描述】:
你知道怎么做吗?
假设我有
char x[] = "ABCD";
我想把它变成一个int,所以我有
int y = 'ABCD';
我只能放单个字符,例如int y = x[0]; 目的是找到十进制表示,但我想要“ABCD”的十进制表示而不仅仅是“A”。
最后我会使用sprintf(dest, "%.2u", value); 来获取字符的十进制表示。
编辑:
我不明白为什么,但是对于“ABCD”,此代码有效
//unrolled bit ops
const char* x = "ABCD";
uint32_t y = 0;
y |= (uint32_t(x[0]) << 24); //MSB
y |= (uint32_t(x[1]) << 16);
y |= (uint32_t(x[2]) << 8);
y |= (uint32_t(x[3]) /*<< 0*/);
但是,如果我使用“(¸þ¶”),我不会得到相同的结果。
EDIT2 **:
我已经尝试过您的最后一次编辑 Sam,但仍然无法正常工作。我得到的值是“4294967294”,而不是正确的值“683212470”。 我也这样做了
int h1 = '(';
int h2 = '¸';
int h3 = 'þ';
int h4 = '¶';
输出:
40
-72
-2
-74
我搜索了完整的 ascii 表,发现“þ”的值为“254”。我想这与此有关...我也尝试了 usigned 但没有好的结果。
edit3:如果我将const char *x = "(¸þ¶" 替换为int x[] = {40, 184, 254, 182};(每个字符的十进制表示,它可以工作。我可以理解哪里出了问题,但我不知道如何解决它。
【问题讨论】:
-
看看here
-
使用位移位和按位或(以及适当大小的无符号类型)。
-
万一您在程序中实际使用
"(¸þ¶",它会中断,因为最后三个字符是多字节字符。编译器应该发出警告。这个问题涵盖了如何将特殊字符放入字符串文字中:stackoverflow.com/q/2420780/1175253