将八进制/十六进制声明的INT / UINT分配给另一个变量

时间:2015-06-17 20:12:34

标签: c++ winapi int octal uint

我的 WIN32 (C ++)代码有一个UINT,可以将其称为数字。 此UINT(或INT无关紧要)的值以 0 开头,并被识别为八进制值。可以使用标准运算符,值将保持八进制。十六进制也是可能的(前面的0x)。 问题是我必须在缓冲区中使用数字的值来计算,而不更改数字的值。我可以在声明行上为缓冲区分配一个类似07777的值,但如果使用像 buffer = number 这样的操作,缓冲区中的值将在十进制基数上识别。

任何人都有解决方案吗?

1 个答案:

答案 0 :(得分:6)

C中没有“八进制值”这样的东西。整数以二进制形式存储。

例如,这三个常量:

  • 10
  • 012
  • 0xA

所有类型和价值都完全相同。它们只是不同的符号 - 而且在源代码中只存在 ,而不是在运行时。为变量分配八进制常量不会使变量成为八进制。

例如,这个:

int n = 012;

将值 10 存储在n中。您可以使用以下几种格式打印该值:

printf("%d\n", n);
printf("0%o\n", n);
printf("0x%x\n", n);

在所有三种情况下,存储的值都将转换为人类可读的字符序列,十进制,八进制或十六进制。

  

任何人都有解决方案吗?

不,因为没有实际问题。

(在评论中提到这一点,请归功于juanchopanza。)