C 如何屏蔽32位整数最右边的16位?

C 如何屏蔽32位整数最右边的16位?,c,C,我正在从文件中读取32位整数值。我需要读取每个整数最右边的16位,并将每个整数分成8位数字 我从文件中读取的数字:125632768327691286553431353 我真的很感谢你帮助我开始这个项目 我现在使用的代码是: unsigned result = (inputValue & 0xFFFF0000) >> 16 最简单的方法是使用位掩码。我假设“最右边”是指从0到15的位。然后可以定义如下所示的宏(快速解决方案): 有关更多信息,请阅读“C编程语言” <

我正在从文件中读取32位整数值。我需要读取每个整数最右边的16位,并将每个整数分成8位数字

我从文件中读取的数字:125632768327691286553431353

我真的很感谢你帮助我开始这个项目

我现在使用的代码是:

   unsigned result = (inputValue & 0xFFFF0000) >> 16

最简单的方法是使用位掩码。我假设“最右边”是指从0到15的位。然后可以定义如下所示的宏(快速解决方案):


有关更多信息,请阅读“C编程语言”

< P>中的位操作,每当您想在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]);
#包括
uint16最右位(uint32最右位){
返回(uint16_t)(i>>16);
}
无效将_除以8位数字(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=最右边的16位(i);
uint8_t编号8位[2];
将_划分为8位数字(右、&Numbers8Bit[1]、&Numbers8Bit[0]);

请您发布一些代码,列出您尝试过的内容和不起作用的内容。此外,您需要更具体一些。“最右边”的含义因建筑而异。您是否使用英特尔、ARM、PPC或其他软件?我正在英特尔、Linux操作系统中尝试此功能。您还应该将
获取8位高位的结果右移16位。是的,完全正确。我忘了。。。实际上是右移8位。对,应该是8位。
#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]);