如何在C中将多字符常量转换为整数?

Pro*_*Dom 1 c c++ char

如何将x中的多字符常量转换为整数?

我试图例如'13'('3' + '1' << 3),但它不能正常工作.我不是说"0123",但是'0123'.它编译,但我不知道编译器打印时如何获得八进制结果6014231063.我不是在寻找atoi哪个只是将其转换为现在的数字.例如,int x = '1'将以十进制数字系统打印49.现在我感兴趣的是什么会打印int x = '0123'.这项任务来自编程竞赛,所以答案不应该是意外行为.

int main(void) { 
  int x = '0123';  
  printf("%o\n", x);
  printf("%d\n", x >> 24);
  printf("%d\n", x << 8 >> 24);
  printf("%d\n", x & 0xff);  
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 6

如何在C中将多字符常量转换为整数?

'0123'在一个int.

int x = '0123'; 
Run Code Online (Sandbox Code Playgroud)

'0123'是一个字符常数.在C中,这是常量的一种形式,它具有类型int.它很少使用,因为它的值是实现定义的.取决于字节顺序和字符编码(例如ASCII),通常如下:

(('0'*256 + '1')*256 + `2`)*256 + '3' = 858927408 = 0x33323130
(('3'*256 + '2')*256 + `1`)*256 + '0' = 808530483 = 0x30313233
Run Code Online (Sandbox Code Playgroud)

此外:用它编写有用的可移植代码是一项挑战.当使用超过1个字符时,许多编码样式禁止它.

  • @SteveSummit:也许,但这是OP*问的问题*. (3认同)