将C / C ++ unsigned char转换为JAVA的问题

时间:2010-09-02 20:29:53

标签: java unsigned-char

unsigned char的问题。 我正在读取一个PPM图像文件,其中包含ASCII /扩展ASCII数据。

对于角色,例如。 '†', 在JAVA中,在将其读取为char并将其转换为int之后,其值为8224。 在C / C ++中,在将其作为unsigned char读取并将其转换为int之后,其值为160.

我如何阅读JAVA以获得160的价值?

以下C ++

unsigned char ch1 ='†';  
char ch2 = '†';  

cout << (int) ch1 << "\n"; // prints 160  
cout << (int) ch2 << "\n"; // prints -96  

在Java中,

char ch1 = '^';  
char ch2 = '†';  
System.out.println (" value : " +  (int) ch1); // prints 94  
System.out.println (" value :" +  (byte) ch1); // prints 94  

System.out.println (" value : " +  (int) ch2); // prints 8224  
System.out.println (" value :" +  (byte) ch2); // prints 32 

以下是一些例外情况 8224† 8226• 8800≠ 8482™ 8710Δ 8211 - 8221“ 8216' 9674◊ 8260 / 8249 < 8249 < 8734∞ 8747∫ 8364€ 8730√ 8804≤

以下是一些好的 94 ^ 102 f 112 p 119 w 126~ 196Ä 122 z 197Å 197Å

感谢任何帮助

3 个答案:

答案 0 :(得分:4)

在C ++中,您在某些特定编码中使用“窄”字符,恰好将字符'†'定义为160.在其他编码中,160可能意味着其他内容,而字符“†”可能完全丢失。

在Java中,您始终在处理Unicode。 8660 = 0x2020 = U + 2020“DAGGER”。

要获得“160”,您需要将字符串转换为与C ++一样的编码。请参阅String.getBytes(charset)

答案 1 :(得分:0)

IIRC Java使用16位表示字符(UNICODE?),除非你使用wchars,否则C ++通常不会。

我认为你最好不要让C ++使用Java使用的UNICODE字符,而不是相反。

答案 2 :(得分:0)

如果将C ++中的unsigned char 160写为单个字节,并使用InputStream.read(),则会得到160.这意味着哪个字符取决于假定的编码,但值160不变。