c++ - 十六进制和二进制操作

标签 c++

我有问题要解决,但不知道该怎么做。我的程序从串口字符串接收十六进制值(如 DFF7DF)。我需要将其转换为二进制形式,丢弃前四位,将第五位作为符号位,将接下来的 12 位作为值。

我需要像普通 INT 一样获取值。

我能够在 MATLAB 中编写这样的程序,但我需要 C++ 才能在我的 linux arm board 上运行它。

在此先感谢您的帮助! 马尔辛

最佳答案

你可以这样做:

unsigned long value = strtoul("DFF7DF", NULL, 16);
value >>= 4; // discard first four bits
printf("Minus sign: %s\n", value & 1 ? "yes" : "no");
printf("Value: %lu\n", (value & 0x1FFF) >> 1);

long newvalue = (value & 1 ? -1 : 1) * ((value & 0x1FFF) >> 1);

关于c++ - 十六进制和二进制操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6624282/

相关文章:

c++ - 对`vtable 的 undefined reference

c++ - PostMessage无法在Winform应用程序中与分配的控制台一起使用

c++ - C++中的函数指针歧义

c++ - 在什么情况下,您在 C++ 中使用信号量而不是互斥量?

c++ - 体素...老实说,我需要知道从哪里开始

c++ - 空数组声明 - 奇怪的编译器行为

c++ - 如何为 llvm IR 调用指令创建结构参数?

c++ - ifstream 忽略空格和换行 - 为什么?

c++ - 数字除以零是硬件异常

c++ - 将文件读入程序