将(uint32_t)与硬编码值进行比较是否安全?

时间:2013-06-29 11:23:32

标签: c uint32-t

我需要对32位整数进行双向运算(确实represent chars,但无论如何)。

以下类型的代码是否安全?

uint32_t input;
input = ...;

if(input & 0x03000000) {
    output  = 0x40000000;
    output |= (input & 0xFC000000) >> 2;

我的意思是,在“if”语句中,我在左侧是uint32_t,在右侧进行按位操作......我不知道!

那么您是否知道硬编码“0x03000000”的类型和大小(我的意思是它存储了多少字节)?

是否有可能某些系统将0x03000000视为一个int,因此仅对2个字节进行编码,这将是灾难性的?

1 个答案:

答案 0 :(得分:1)

  

以下类型的代码是否安全?

是的,是的。

  

那么您是否知道硬编码“0x03000000”的类型和大小(我的意思是它存储了多少字节)?

0x03000000 int的系统上,32-bit intlong的系统上的16-bitint。< / p>

(由于uint32_t在这里,我假设有两个补码和CHAR_BIT 8。我也不知道任何系统16-bit int64-bit long。)

  

是否有可能某些系统将0x03000000视为一个int,因此仅对2个字节进行编码,这将是灾难性的?

16-bit int系统中见上文,0x03000000long32-bit。 C中的十六进制常量是可以表示的第一种类型: intunsigned intlongunsigned longlong longunsigned long long