1

unsignedcharの問題。ASCII/拡張ASCIIのデータを含むPPM画像ファイルを読んでいます。

キャラクターの場合、例えば。'†'、JAVAでは、charとして読み取り、intに型キャストした後、その値は8224です。C/ C ++では、unsigned charとして読み取り、intに型キャストした後、その値は160です。

値160を取得するためにJAVAを読み取るにはどうすればよいですか?

次の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Ä122z197Å197Å

どんな助けでも大歓迎です

4

3 に答える 3

4

C ++では、文字「†」を160として定義する特定のエンコーディングで「狭い」文字を使用しています。他のエンコーディングでは、160は別の意味を持ち、文字「†」が完全に欠落している場合があります。

Javaでは、常にUnicodeを扱っています。8660 = 0x2020 = U+2020「DAGGER」。

「160」を取得するには、文字列をC++で使用しているのと同じエンコーディングに変換する必要があります。String.getBytes(charset)を参照してください。

于 2010-09-02T20:41:05.770 に答える
0

IIRC Javaはchars(UNICODE?)に16ビット表現を使用しますが、C ++は通常、wcharsを使用しない限り使用しません。

Javaが使用するUNICODE文字をC++で使用できるようにする方が、その逆ではない方がよいと思います。

于 2010-09-02T20:33:44.690 に答える
0

unsigned char160をC++で1バイトとして書き出し、InputStream.read()を使用すると、160が得られます。これが意味する文字は、想定されるエンコーディングによって異なりますが、値160は変更されません。

于 2010-09-02T20:53:29.500 に答える