【问题标题】:How can I encode unsigned 16 and unsigned 32 bit integers to an unsigned 8 bit memory array?如何将无符号 16 和无符号 32 位整数编码为无符号 8 位内存阵列?
【发布时间】:2017-07-10 21:14:22
【问题描述】:

我知道如何进行位移,但我的值似乎超出了边缘,并且我失去了原始值以作为尝试保留 8 位的回报。

【问题讨论】:

  • 这很可能是一个有趣的问题,但您必须提供更多信息 - 例如,示例代码、示例输入和显示问题的示例输出。 minimal reproducible example

标签: arrays integer bit-manipulation unsigned bits


【解决方案1】:

对于无符号 16 位整数:

unsigned short val16 = 0x1234;
unsigned char enc[2];
enc[0] = val16 & 0xff;              // stores 0x34 to enc[0]
enc[1] = val16 >> 8 & 0xff;         // stores 0x12 to enc[1]

对于无符号 32 位整数:

unsigned int val32 = 0x12345678;
unsigned char enc[4];
enc[0] = val32 & 0xff;              // stores 0x78 to enc[0]
enc[1] = val32 >> 8 & 0xff;         // stores 0x56 to enc[1]
enc[2] = val32 >> 16 & 0xff;        // stores 0x34 to enc[2]
enc[3] = val32 >> 24 & 0xff;        // stores 0x12 to enc[3]

更新

与十进制文字完全相同的代码是:

unsigned short val16 = 4660;       // 4660 = 0x1234
unsigned char enc[2];
enc[0] = val16 & 255;
enc[1] = val16 >> 8 & 255;

unsigned int val32 = 305419896;    // 305419896 = 0x12345678
unsigned char enc[4];
enc[0] = val32 & 255;
enc[1] = val32 >> 8 & 255;
enc[2] = val32 >> 16 & 255;
enc[3] = val32 >> 24 & 255;

【讨论】:

  • 谢谢!是否可以在不使用十六进制数据类型的情况下做到这一点?
  • @bigdog225 是的,当然。我在答案中使用了十六进制文字,只是为了阐明 2 字节或 4 字节值中每个字节的边界。您可以使用任何其他文字类型,例如小数。
  • 我将如何使用小数呢?如果你不介意给我看
  • @bigdog225 已更新至帖子。
  • 欣赏它,这真的很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2011-11-10
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多