C 中的按位运算在 char 中接收二进制

发布于 2025-01-04 15:34:27 字数 143 浏览 1 评论 0原文

我通过 C 中的串行接收 2 个字节的二进制信息。

我以字符形式接收它们。

所以我需要加入 2 个字符来创建一个 int 但我不确定如何做到这一点..首先第一个字节是二进制格式而不是字符格式..所以我不确定如何将其转换为可用的形式我的程序。

I am receiving 2 bytes of binary information via Serial in C.

I am receiving them in a char.

So I need to join the 2 chars to make a int but Im unsure how to do that.. first of all the first byte is in binary format and not char format.. So im unsure how I Can convert it into a useable form for my program.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

雨夜星沙 2025-01-11 15:34:27

只是OR 将它们放在一起吗?

x = (b1 << 8) | b2;

确保它们没有签名或进行相应的转换(转移签名的东西是令人讨厌的)。

Just OR them together ?

x = (b1 << 8) | b2;

Make sure they're unsigned or cast accordingly (shifting signed stuff is nasty).

无妨# 2025-01-11 15:34:27

您可以使用类似这样的内容:

int my_int=char1;
myint<<=8;
myint|=char2;

这假设 char1 包含最高有效字节。否则交换 1 和 2。

You can use something like this:

int my_int=char1;
myint<<=8;
myint|=char2;

This assumes char1 contains the most significant byte. Switch the 1 and 2 otherwise.

苯莒 2025-01-11 15:34:27

使用unsigned char来避免符号扩展问题。

val16 = char1 * 256 + char2;

use unsigned char to avoid sign-extension problems.

val16 = char1 * 256 + char2;
一向肩并 2025-01-11 15:34:27

首先,最好以 unsigned 字符形式接收它们,这样就不会出现符号扩展等问题。

如果您想将它们组合起来,您可以使用以下内容:

int val = ch1; val = val << 8 | ch2;

或:

int val = ch2; val = val << 8 | ch1;

根据系统的字节序,并假设您的系统具有八位 char 类型。

For a start, it would be better to receive them in an unsigned char just so you have no issues with sign extension and the like.

If you want to combine them, you can use something like:

int val = ch1; val = val << 8 | ch2;

or:

int val = ch2; val = val << 8 | ch1;

depending on the endian-ness of your system, and assuming your system has an eight-bit char type.

孤星 2025-01-11 15:34:27

如果 MSB(最高有效字节)在前:

unsigned char array[2];
...
int bla;
bla = array[1] | (array[0] << 8);

如果 LSB(最低有效字节)在前:

bla = array[0] | (array[1] << 8);

if MSB (Most Significant Byte) comes first:

unsigned char array[2];
...
int bla;
bla = array[1] | (array[0] << 8);

if LSB (Least Significant Byte) comes first:

bla = array[0] | (array[1] << 8);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文