2009-04-08 33 views

答えて

5

「最初の」とは何かを意味します。 0xdeadbeefのような数字を指定すると、0xdeadまたは0xbeefを「最初」と見なしますか?

前者の場合、数値を65536(整数)で割ります。後者の場合、モジュラスを65536に計算してください。

これはもちろんshift /などのバイナリ演算子でも可能ですが、希望の言語で表現する方法がわからないだけです。私は、より正確な詳細と他の答えがあることを確信しています。

1

最初に仮定すると、最小の価値ですか?

My32BitNumberがある場合は、実際には、例えば32ビットの数値を見ている場合

dim f16 as integer = &hFFFF and My32BitNumber 

int型さて、最後の4桁の16進数であるDEADBEEF の最初の16ビットは何ですか?BEEF

0

& 0xffffとは何ですか?

int input = 0xabcd; 
int first2Bytes = input & 0xffff; 
+0

これはちょうど右端の8ビットを与え、右端の16ビットと一致するように0xFFFFに展開します。 – sisve

+0

@sipwiz:私はそれに従うことができません... Hex 0xFは15です。これは4ビット(8 + 4 + 2 + 1)です。 – unwind

+0

私の間違い申し訳ありません:(間違ったコメントと修正された回答を削除しました – sipwiz

0

これはあなたに4つのバイト配列として32ビットの数を取得します:取得するには

Dim first As Int16 = BitConverter.ToInt16(bytes, 0) 

:符号付き16ビット数として最初の2つのバイトを取得するには

Dim bytes As Byte() = BitConverter.GetBytes(number) 

を最初の2バイトは符号なし16ビット番号:

Dim first As UInt16 = BitConverter.ToUInt16(bytes, 0) 

これはもちろん、ビットシフトまたは除算を使うよりも少し遅いですが、ビットシフトまたは除算の使用に問題があるかもしれない符号ビット(最上位ビット)を正しく処理します。

また、16ビットの符号なし数として最初の2つのバイトを取得し、それを整数に割り当てることができます。

Dim first As Integer = BitConverter.ToUInt16(bytes, 0) 

(符号付き16ビット数を取得し、整数に割り当てることは符号ビットがあることを意味

最初の2バイト(最上位)の代わりに最後の2バイト(最下位)を使用したい場合は、その整数の上位16ビットにコピーしてください。 ToUInt16/ToInt16 0から2まで呼び出します。

+0

これは最も簡単なことですが、2つの計算を処理する必要があります。 – Shimmy

0
Dim i As Integer = &HDEADBEEF 
    Dim s16 As UShort 
    s16 = i And &HFFFF 'BEEF 

    'or 
    s16 = (i >> 16) And &HFFFF 'DEAD 
関連する問題