3

バイト (16 の倍数) を保存できるスマート カードを持っています。もしそうなら:Save(byteArray, length)それならできますしReceive(byteArray,length) 、保存したのと同じ順序でバイト配列を取得できると思います。今、私はそのような問題を抱えています。このカードに整数を保存し、他のマシン (エンディアンが異なる) でそれを読み取ると、間違ったデータが取得される可能性があることに気付きました。したがって、おそらく解決策は、常にこのカードにリトルエンディアンの方法でデータを保存し、常にリトルエンディアンの方法でデータを取得することだと思いました(読み書きするアプリを作成するので、数字を自由に解釈できますお気に入り。)。これは可能ですか?これが私が思いついたものです:

char 配列に整数を埋め込みます。

int x;
unsigned char buffer[250];

buffer[0] = LSB(x);
buffer[1] = LSB(x>>8);
buffer[2] = LSB(x>>16);
buffer[3] = LSB(x>>24);

重要なのは、マシンのエンディアンに関係なく、LSB 関数が最下位バイトを返す必要があることです。そのようなLSB関数はどのようになりますか?

さて、整数を再構築するには(このようなもの):

int x = buffer[0] | (buffer[1]<<8) | (buffer[2]<<16) | (buffer[3]<<24);

私が言ったように、それを読み書きするマシンのエンディアンに関係なく、これを機能させたいと思っています。これは機能しますか?

4

3 に答える 3

1

「LSB」機能は、以下のようにマクロを介して実装できます。

#define LSB(x) ((x) & 0xFF)

ただし、x は符号なしです。

于 2013-10-12T15:20:22.213 に答える