0

わかりましたので、正確に 8 バイトを含むファイルがあります。

hexdump /tmp/temp_session_TGAyUSfICJgY.txt
0000000 b21b 113c bf3a 4a92                    
0000008

ファイルを cat すると、正常で予想される gobbly-gook が表示されます (エンコーディングによっては、実際の文字が表示される場合があります)。

cat /tmp/temp_session_TGAyUSfICJgY.txt 
�<:��J

Javaでバイトを読み込もうとすると、逆に出てきます。私のコードは次のとおりです。

            InputStream input = new FileInputStream(session_file_param);
            int a = 0;
            int i=0;
            while(a != -1) {
                    a = input.read();
                    System.out.println(a);
                    if(a != -1) {
                            pw[i] = (byte)a;
                    }
                    i++;
            }

            System.out.println("String representation of session pw is " + pw.toString());

私の出力は次のとおりです(読みやすくするために =HEX を追加しました):

27 = 1b
178 = b2
60 = 3c
17 = 11
58 = 3a
191 = bf
146 =92
74 = 4a
-1
String representation of pw is [B@7f971afc

ファイル RAW をバイト単位で読み取っている場合、バイトは順番どおりに出力されるべきではありませんか? 基本的に、各 2 バイト ブロックが反転されます。

編集:

そうです、アラームでごめんなさい。テストするために次のようにしました。

#include <stdio.h>
#include <stdlib.h>

int main() {
        FILE *fp = fopen("/tmp/temp_session_TGAyUSfICJgY.txt", "r");
        char byte;
        while (!feof(fp)) {
                fread(&byte,1,1, fp);
                printf("%x\n", byte);
        }
}

そして出力:

1b
ffffffb2
3c
11
3a
ffffffbf
ffffff92
4a
4

4 に答える 4

1

デフォルトのhexdumpは、ファイルを2バイトのチャンクで出力し、それらを逆にしているようです。

使ってみて

hexdump -C /tmp/temp_session_TGAyUSfICJgY.txt

また

xxd /tmp/temp_session_TGAyUSfICJgY.txt

ファイルに表示される順序で表示されたバイトを確認します。

于 2013-07-16T18:47:41.407 に答える
0

次の hexdump のバリアントを使用します。

hexdump -C /tmp/temp_session_TGAyUSfICJgY.txt

Java プログラムが生成しているのと同じ順序でバイトが表示されます。

私は、デフォルトでhexdumpビッグエンディアンのショートパンツを行うと思います。

于 2013-07-16T18:45:00.337 に答える