【问题标题】:how to convert a char to binary?如何将char转换为二进制?
【发布时间】:2011-06-21 00:36:01
【问题描述】:

有没有一种简单的方法可以将字符转换为其二进制表示?

我正在尝试一次向另一个进程发送消息。 所以如果消息是“你好”,我需要先把'H'转成二进制,然后按顺序发送。

最好存储在数组中。

感谢您的任何反馈,无论是伪代码还是实际代码都将是最有帮助的。

我想我应该提到这是一个学习信号的学校作业......这只是了解它们的一种有趣方式。 SIGUSR1 用作 0,SIGUSR2 用作 1,重点是从一个进程向另一个进程发送消息,假装环境正在锁定其他通信方式。

【问题讨论】:

  • 您能否举例说明您希望实际发送的内容?
  • 所以你想一次只发送一个二进制数字?为什么?
  • 其实它带有信号......我所需要的只是一个字符的二进制表示。所以也许我提供了一个 int 数组,并通过一些函数,它变成了二进制。然后我可以循环遍历数组并发送每一位。这是一种跳出框框思考的练习。
  • 那个盒子会被贴上“理智”的标签吗? j/k, j/k :)
  • @David Heffernan,我认为这是一个刻薄的评论。我可以理解这当然不是传统的做事方式,但我认为你可以简单地说有一种更简单的做事方式,或者像 Ed S. 那样问为什么。

标签: c binary char


【解决方案1】:

您只需为每个位循环执行一次移位并执行逻辑AND 即可获取该位。

for (int i = 0; i < 8; ++i) {
    send((mychar >> i) & 1);
}

例如:

unsigned char mychar = 0xA5; // 10100101

(mychar >> 0)    10100101
& 1            & 00000001
=============    00000001 (bit 1)

(mychar >> 1)    01010010
& 1            & 00000001
=============    00000000 (bit 0)

等等……

【讨论】:

  • 您应该使用 unsigned char 或者确保该值始终为正,因为 &gt;&gt; 的结果具有负操作数的实现定义值。
【解决方案2】:

怎么样:

int output[CHAR_BIT];
char c;
int i;
for (i = 0; i < CHAR_BIT; ++i) {
  output[i] = (c >> i) & 1;
}

这会将来自c 的位写入output,最低有效位在前。

【讨论】:

  • 这正是我想要的,我会测试一下。
猜你喜欢
  • 2012-02-24
  • 2021-11-14
  • 2022-11-07
  • 1970-01-01
  • 2011-08-10
  • 2016-05-12
  • 2011-09-04
  • 2011-02-17
  • 1970-01-01
相关资源
最近更新 更多