c - 如何从数字中提取某些位并将它们放入新变量中?

标签 c byte bitwise-operators bit

所以今天我参加了一次考试,我需要编写一些程序,其中一项作业对我来说真的很难:

unsigned char msg_to_opmag (unsigned short msg);

int main()
{
   short msg = 0x08CF //0x08CF = 1000 1100 1111
   msg_to_opmag(msg);
}

我需要编写一个函数来提取粗体位 (100011001111),以便得到 00001001(字符有 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

关于c - 如何从数字中提取某些位并将它们放入新变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483317/

相关文章:

c - va-args 没有正确解析

c - 如何使用 Visual Studio 2010 为 64 位编译 C DLL?

c++ - 无法理解部分代码(位操作)

Java小端顺序

javascript - 如何在 PHP 中实现 JS 风格的按位左移运算符?

javascript - 二进制数据处理和按位与

c - 使用 gcc/gdb 设置 Emacs 的初学者指南?

c++ - 当大小是变量而不是常量时如何创建数组?

java - 当某些字节错误时,BitmapFactory.decodeStream(inputStream) 总是返回 null

Python - 字节读/写和按位AND