1

2 バイトを格納するバッファがあるとします。

char *buf=new char[4];
// 00000010 00000000 (.. other stuff ..)

私がやりたいことは、最小バイトを最上位バイトに切り替え、その値を変数に格納することです。次のようにしようとしています:

short len=buf[1];
len <<= 8;
len |= buf[0];
    // Result, as expected: 00000000 00000010

最上位バイト (buf[0]) が >= 128 でない限り、問題なく動作します。これにより、or 演算子 (|) が short の半分を 1 で埋めます。例:

Original: 10000110 00000000
Should be: 00000000 10000110
But is: 11111111 10000110

ありがとう(ああ、file.read(...、4);でファイルからバイトを読んでいます-これが関連しているかどうかさえわかりません)

4

3 に答える 3

6

あなたの実装は明らかに符号付き数値の 2 の補数表現を使用しています。代わりに符号なしの値を使用してください

unsigned char * buf = new unsigned char[2];
...

unsigned short len=buf[1];
len <<= 8;
len |= buf[0];
于 2013-07-16T11:25:02.553 に答える
0

これを試して:

unsigned short buf;
...
buf = buf << 8 | buf >> 8;

または、順列を実行するだけです:

char buf[2];
char tmp;
...
tmp = buf[0];
buf[0] = buf[1];
buf[1] = tmp;

これが役立つことを願っています!

于 2013-07-16T11:39:25.253 に答える