【问题标题】:Signed char to byte有符号字符到字节
【发布时间】:2015-01-17 07:30:06
【问题描述】:

我有一个用 C 语言编写的二进制文件,其中包含一个等于数字 1 的有符号字符数据类型。 我使用 MappedByteBuffer 将单个字节读入字节数据类型。 但是,当我打印出来时,我得到 49。我做错了什么?

C:

char * buffer = malloc(100);
signed char c;
int temp;
printf("Coordinate System?\n");
scanf("%s",&buffer[0]);
sscanf(&buffer[0],"%d",&temp);
c = temp+'0';
fwrite(&c,1,1,fd);

Java:

byte b;
b = file.read();
System.out.println(b) ===> prints the number 49.        

我知道这是某种位顺序之类的,但我不确定。

谢谢

【问题讨论】:

  • 你是如何在 Java 中构造 file 的?
  • 不能认为 '1' 是 ASCII 49。
  • 我意识到这一点。我想知道如何用另一种方式解释它。
  • @Fra:试试signed char c = '1';
  • 你确定你没有在 C 语言中做signed char c = '1'; 还是你从其他地方得到1 而不是你说的?注意signed 不是必需的,C 中的char 已签名。

标签: java c type-conversion


【解决方案1】:

问题在于:

sscanf(&buffer[0],"%c",&c);

它说将传入的字符扫描为 ascii 值。因此您可以输入“a”、“-”或“1”,然后扫描 ascii 值。

您需要扫描%d 以获得实际整数。您将扫描到 int 变量而不是 char,然后进行 0-255 范围检查以确定是否可以存储在单个字节中。

【讨论】:

  • 非常感谢各位的帮助。
  • 我无法让它在 Java 方面工作。以上是我在编写文件时尝试在 C 中处理它的方法。
  • 你为什么要加 '0' - 你到底想在这个程序中做什么?如果要写入整数,则不应将其转换为 ascii。如果你想写一个字符,那么我的答案是不正确的,你只需要在Java中从字节转换为字符。
  • 我只想将从控制台读取的整数存储为一字节字符以用于文件大小压缩。因此,当我稍后阅读它时,我可以将其作为整数表示而不是 ASCII 相关来阅读。
  • 如果你不想要ascii,不要做c = temp+'0',只要做c = temp
猜你喜欢
  • 2014-11-26
  • 2013-07-19
  • 2017-10-01
  • 2011-10-21
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2014-12-06
  • 2015-01-12
相关资源
最近更新 更多