【发布时间】:2012-04-09 10:05:08
【问题描述】:
玩弄 C 或 C99,我试图了解转换、位移和十六进制值的工作原理。
我有以下问题
char c[4];
c[0] = 0x41;
c[1] = 0x42;
c[2] = 0x43;
c[3] = 0x00;
printf("%s", c); //prints ABC
printf("%X", c); //prints 99B11760
99B11760 从何而来?
同样...
int main() {
char a = 'a'; //ascii value is 0x41 (Mistake I made, 'a' is 0x61, 'A' is 0x41)
printf("%X\n",a); //outputs "61"? (THIS IS CORRECT OUTPUT, 'a' != 0x41)
}
我一直在寻找解决方案来解决将 Hex 值存储到 char 中的类似问题,但我无法理解的是某些存储值与 ASCII 值不对应的原因或位置。由于它既不是 ASCII 十六进制值、十进制值或八进制值,所以使用 printf("%X\n", c); 时打印的是什么值;
【问题讨论】:
-
这段代码有问题。你在对编译器撒谎,告诉它你在传递一件事,而实际上你传递了其他东西。停止做无意义的事情,谜团就会消失。
-
不能同意更多@DavidSchwartz,但我发布这个问题的原因是为了帮助我了解像这样的错误代码在哪里出现错误。我确实尽量不发布愚蠢的问题,大多数时候我很幸运能找到答案,但这确实让我追了好一阵子。