如何从数字中提取某些位并将它们放入新变量中?
How do I extract certain bits from a number and put them in a new variable?
所以今天我参加了考试,我需要编写一些程序,其中一项作业对我来说真的很难:
unsigned char msg_to_opmag (unsigned short msg);
int main()
{
short msg = 0x08CF //0x08CF = 1000 1100 1111
msg_to_opmag(msg);
}
我需要编写一个函数来提取粗体位 (100011001111) 以便将是 00001001 (char有 8 位)
此示例中的输出为:
hex number: 0x08CF turns in 0x09 after being extracted.
我的问题是如何编写这个函数?
一切都是关于位掩码和位移。
示例:
#include <stdio.h>
#define MASKA 0x038 // 0000 0011 1000
#define MASKB 0x780 // 0111 1000 0000
#define SHIFTA 3 // XX X-->
#define SHIFTB 4 // 0XXX X--- >
int main()
{
short msg = 0x08CF;
short msg2 = ((msg & MASKA) >> SHIFTA) | ((msg & MASKB) >> SHIFTB);
printf("0x%04x -> 0x%02x\n", msg, msg2);
}
输出:
0x08cf -> 0x09
所以今天我参加了考试,我需要编写一些程序,其中一项作业对我来说真的很难:
unsigned char msg_to_opmag (unsigned short msg);
int main()
{
short msg = 0x08CF //0x08CF = 1000 1100 1111
msg_to_opmag(msg);
}
我需要编写一个函数来提取粗体位 (100011001111) 以便将是 00001001 (char有 8 位)
此示例中的输出为:
hex number: 0x08CF turns in 0x09 after being extracted.
我的问题是如何编写这个函数?
一切都是关于位掩码和位移。
示例:
#include <stdio.h>
#define MASKA 0x038 // 0000 0011 1000
#define MASKB 0x780 // 0111 1000 0000
#define SHIFTA 3 // XX X-->
#define SHIFTB 4 // 0XXX X--- >
int main()
{
short msg = 0x08CF;
short msg2 = ((msg & MASKA) >> SHIFTA) | ((msg & MASKB) >> SHIFTB);
printf("0x%04x -> 0x%02x\n", msg, msg2);
}
输出:
0x08cf -> 0x09