我正在从文件中读取32位整数值。我需要读取每个整数的最右边16位,并将每个整数分成8位数。
我从档案中读取的数字:1,256,32768,32769,128,65534,33153
我非常感谢你帮助开始这个项目。
我现在使用的代码是:
unsigned result = (inputValue & 0xFFFF0000) >> 16
答案 0 :(得分:1)
最简单的方法是使用位掩码。我假设“最右边”表示从0到15的位。然后你可以定义如下的宏(快速解决方案):
#define GET_RIGHTMOST_16_BITS(x) ((x) & (unsigned int)0x0000FFFF)
#define GET_LOW_8_BITS(x) ((x) & (unsigned short)0xFF)
#define GET_HIGH_8_BITS(x) (((x) & ~((unsigned short)0xFF)) >> 8)
有关详细信息,请阅读“The C Programming Language”一书中的位操作
答案 1 :(得分:1)
每当想要在C中使用显式大小整数时,请考虑固定宽度类型。
#include <stdint.h>
uint16_t rightmost16bits(uint32_t i) {
return (uint16_t) (i >> 16);
}
void divide_into8bit_numbers(uint16_t i, uint8_t *MSByte, uint16_t *LSByte) {
*MSByte = (uint8_t) (i >> 8);
*LSByte = (uint8_t) (i & 0xFF);
}
uint32_t i = fromfile();
uint16_t right = rightmost16bits(i);
uint8_t Numbers8Bit[2];
divide_into8bit_numbers(right, &Numbers8Bit[1], &Numbers8Bit[0]);