如何将无符号字符转换为二进制表示

3

我试图将无符号字符转换为它们的十六进制ASCII值,但以二进制形式表示。

例如:

无符号字符C转换成0100 0011(43)

我可以从十六进制转换为二进制,问题是如何从字符获取其十六进制值。

for (n = 0; n < 8; n++){
    binary[n] = (letter >> n) & 1;}

我一直得到错误的值,因为字母以其自身的ASCII值而不是十六进制ASCII值的二进制版本输入。


代码应该是可以工作的,你只是从右到左阅读它。同时要注意,如果它确实是无符号字符,否则你可能会在算术移位时遇到问题。 如果你需要更多帮助,请尝试为代码提供更多上下文(如何获取字母,期望得到什么,实际得到什么,如何打印结果等)。 - Ordoshsen
2
尝试使用 for(int n = 7; n >= 0; n--) - Weather Vane
@WeatherVane 这不会产生另一个结果。letter 没有被改变。 - the busybee
@Ordoshsen,只要char至少为8位宽,使用所示代码将不会出现signed char的问题。 - the busybee
@Java新手 请展示一些错误的数值给我们。迄今为止,您提供的代码中我没有看到任何真正的错误。也许错误在程序的其他部分中。如果您能给我们一个[示例],那将非常有帮助。 - the busybee
@thebusybee 你说得对,我想当我看到移位和算术移位时就有些急躁了(这是实现定义的行为)。无论如何,在这里并不重要。然而,字符至少需要8位(具体来说,至少可以容纳256个值并且大小为一个字节),并且由于移位的定义方式(乘以或除以2的幂),所以整个过程默认情况下必须正常工作。 - Ordoshsen
1个回答

1
我认为你已经很好地逐个选择了这些位,只是与你想要的顺序相反。
这样做是可以的:
#include <stdio.h>
int main() {
  unsigned char letter = 'C';
  int binary[8];
  for(int n = 0; n < 8; n++)
    binary[7-n] = (letter >> n) & 1;
  /* print result */
  for(int n = 0; n < 8; n++)
    printf("%d", binary[n]);
  printf("\n");
  return 0;
}

运行这个程序,会得到你想要的 01000011。

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