【发布时间】:2015-04-29 09:11:09
【问题描述】:
对于网络应用程序,我需要一个带符号的 2 的补码整数。具有自定义宽度。在运行时指定。假设整数的值落在宽度内。
我遇到的问题是奇偶校验位。有什么方法可以避免手动设置奇偶校验位?假设我有一个宽度为 11 位的整数,我会将其存储在 2 个字符的数组中,如下所示:
int myIntWidth = 11;
int32_t myInt= 5;
unsigned char charArray[2] = memcpy(charArray, &myInt, (myIntWidth + 7)/8);
【问题讨论】:
-
使用位域来获得所需的整数大小。可能您会希望将此位字段与联合中的简单整数(如果联合大于整数)结合起来,以获得对简单修改的简单访问。
-
位字段本质上是不可移植的。对于网络应用程序,您需要存储另一端的服务器或设备期望的值,而不是您的编译器认为正确的值。
-
使用位域的一个问题是它的大小不能在运行时定义。
-
@Lưu Vĩnh Phúc 这与我想要实现的目标相反。我正在尝试减小 int 宽度。
标签: c++ memory integer signed signed-integer