【发布时间】:2017-02-20 02:00:38
【问题描述】:
我有以下UINT8 变量:
UINT8 var1 = 0b00000001; //0000 0001
UINT8 var2 = 0b00000011; //0000 0011
UINT8 var3 = 0b00000111; //0000 0111
UINT8 var4 = 0b00001111; //0000 1111
我想将这四个UINT8 变量打包成一个UINT32 变量,其值如下:
UINT32 var1 = 0b00000001000000110000011100001111; //00000001 00000011 00000111 00001111
以下代码会正确且安全地执行此操作吗?
UINT32 var1 = (var1<<24) + (var2<<16) + (var3<<8) + var4;
【问题讨论】:
-
您似乎认为
00000001等是二进制文字。您使用的是哪个 C++ 编译器? -
UINT8和UINT32不是标准类型,因此您需要告诉我们它们的实际定义是什么。 -
不,它不会,因为
var2 = 00000011的值是 9,而不是 3,因为前导 0 表示八进制表示法 -
被几个人暗示过,但没有直接说出来。从 VS 2015 预览版(以及一段时间的 GCC)开始,您可以将二进制文字写为
UINT8 var1 = 0b00000001。否则,你不能。最简单的可能是UINT8 var2 =3; // 0000 0011。其他解决方案:stackoverflow.com/questions/2611764/… -
@M.A.Kishawy 为什么不试试呢?
标签: c++ visual-c++ int type-conversion bit-manipulation