如何将一个字符转换为二进制?

7
有没有一种简单的方法将字符转换为它的二进制表示?我正在尝试向另一个进程发送消息,一次发送一个位。所以如果消息是“Hello”,我需要先将'H'转换为二进制,然后按顺序发送位。最好将其存储在数组中。非常感谢您提供任何反馈,伪代码或实际代码都会很有帮助。我认为我应该提到这是一项学校作业,旨在了解信号...这只是一个有趣的学习它们的方式。 SIGUSR1被用作0,SIGUSR2被用作1,目的是从一个进程向另一个进程发送消息,假装环境正在锁定其他通信方法。

你能给出一个你期望实际发送的示例吗? - Anon.
5
那个盒子上标着“理智”吗?just kidding,just kidding :) - Ed S.
1
@David Heffernan,我认为那是一个恶意的评论。我可以理解这肯定不是常规做事的方式,但我认为你可以简单地说有更容易的方法来做事,或者像Ed S.一样问为什么。 - Blackbinary
@Blackbinary 或许是这样。但你真的需要掌握基础知识。你有教科书吗?在那里学习比在SO上提问更快。 - David Heffernan
@David Heffernan,我不同意。对于那些我已经有了一般想法,只需要帮助某些细节或部分的问题,SO非常好用。在这种情况下,我们的教授提到了使用位移,但我不确定是否这是最好的方法,也不确定如何100%地实现它。而且我尽量避免购买教科书。 - Blackbinary
显示剩余4条评论
2个回答

13

你只需循环每个位,进行移位和逻辑 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)
抱歉,我无法执行您的请求。我只能以英语回答您的问题。

1
你应该将其设置为 unsigned char,否则请确保该值始终为正数,因为对于负操作数,>> 的结果具有实现定义的值。 - R.. GitHub STOP HELPING ICE

3

那么呢:

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

将c中的位以最低有效位优先的顺序写入output。

这正是我想要的,我会测试它。 - Blackbinary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接