web-dev-qa-db-ja.com

上位バイトと下位バイトの使用方法は?

2バイトを使用して32768を表現しようとしています。上位バイトには、下位バイトと同じ値を使用しますか?それは、それらを異なって解釈しますか、それとも実際の値を入れますか?だから私は32678 0や256 0のようなものを入れますか?それともどちらでもない?どんな助けでもありがたいです。

16
Sterling

16進数では、数値は0x8000で、0x80と0x00です。入力から下位バイトを取得するには、_low=input & 0xff_を使用し、上位バイトを取得するには、high=(input>>8) & 0xffを使用します。

input=low | (high<<8)のように、ローバイとハイバイから入力を取得します。

使用する整数型がこれらの数値を格納するのに十分な大きさであることを確認してください。 16ビットシステムでは、_unsigned int_/shortまたはsigned/_unsigned long_は十分に大きい必要があります。

22
John McFarlane

バイトには、0〜255の値のみを含めることができます。 32768は0x8000なので、上位バイトは128で、下位バイトは0です。

ポインターはこれを簡単に行うことができ、シフトよりもはるかに高速で、プロセッサーの計算を必要としません。

この回答を確認してください

しかし、私があなたの問題を理解した場合、2バイトで最大32768を格納する必要があるため、2つの符号なし整数、または1つの符号なしlongが必要です。 intをlongに、charをintに変更するだけです。

1
cyberponk

32768は0x8000なので、上位バイトに0x80(128)を入れ、下位バイトに0を入れます。

もちろん、符号なしの値を想定しています。 32768は、実際には、符号付き16ビット値の正当な値ではありません。

0
Alnitak

16進数の32768は、リトルエンディアンのプラットフォームでは0080です。 「高」(この場合は2番目)バイトには128が含まれ、「低」には1バイトが含まれます。

0
azyoot

この機能を試してください。 Hi_ByteとLo_Byteを関数に渡すと、値がWordとして返されます。

Word MAKE_Word( const BYTE Byte_hi, const BYTE Byte_lo)
{
     return   (( Byte_hi << 8  ) | Byte_lo & 0x00FF );
}
0