1

Java の符号なし値に関する問題に直面しています。私を喜ばせてください。実際の問題は、さまざまなデータ型が配置されているバイトバッファーを持っていることです (たとえば、最初に float、次に double、次に int の後にその double のように)、それらの一部は署名され、一部は署名されていない可能性があります。順序とデータ型と符号情報を含むリストを持っているので、バイトバッファからそれらを読み取り、対応する変数に直接割り当てています

例えば:

int i= bytebuffer.getInt();

すべて問題ありませんが、符号なしの最大値の場合、負の値として与えられます。int float, double の場合、これは私が直面している同じ問題です。

Java が unsigned 値をサポートしていないことをいくつか読みましたが、 int 、 short から unsigned 値への変換に遭遇しましたが、 double 、 float について見つけることができませんでした。

編集:私のコードは

        File file= new File("blob_960");
        int count,length;

        length = (int)(file.length());
        count=(length/380);

         ByteBuffer bytebufr= ByteBuffer.allocate(length);

        bytebufr.order(ByteOrder.LITTLE_ENDIAN);

        byte[] bytes= new byte[length];

        FileInputStream fis = new FileInputStream(file);

        fis.read(bytes,0, length);

        bytebufr.put(bytes);
        bytebufr.position(0);

                    int i = bytebufr.getInt();
                    float f = bytebufr.getFloat();
                    double d = bytebufr.getDouble();

例 - バイト値はあります 220 を使用してバイトを読み取っています

            byte b = bytebufr.get();
            System.out.println(b); // this is giving -36 
           // I am expecting 220.

    Binary value of 220 is -11011100
    Binary value of -36 is -11011100

値を符号付きの値と見なし、-36 を指定していますが、値は符号なしで、220 を期待しています。

ダブルも同様。

どんな体でもこれについて助けてください。

4

3 に答える 3

3

はい、Java には符号付きの値しかありません (unsigned short と見なされる可能性のある char を除く)。

unsigned short (たとえば) の場合、short を読み書きし、その値を (signed) int に保持できます。

short x = -3; // But intended as unsigned 0xFFFD
int ux = x & 0xFFFF; // The unsigned value by masking

等々。

unsigned double 初耳です。バイナリ形式を確認してください。符号付き Java double の場合、符号ビットがあり、おそらく unsigned double の場合は仮数に追加されます。その場合、精度がわずかに失われますが、変換は可能です。

于 2013-11-07T09:12:55.470 に答える