32位十六进制的前16位

时间:2009-04-08 13:31:24

标签: vb.net

请原谅我在这里缺乏知识,但有人可以告诉我如何获得32位十六进制数的前16位。

5 个答案:

答案 0 :(得分:5)

这取决于你所说的“第一”。给定一个数字,例如0xdeadbeef,您会认为0xdead0xbeef是“第一个”吗?

如果是前者,则将数字除以65536(作为整数)。如果是后者,则将模数计算为65536。

这当然也适用于二元运算符,例如shift /,我只是不确定如何用你想要的语言来表达它。我相信会有更精确的细节会有其他答案。

答案 1 :(得分:1)

首先假设你的意思是价值最低?

如果My32BitNumber是int

dim f16 as integer = &hFFFF and My32BitNumber

如果您实际上正在查看32位数字,例如哎呀,DEADBEEF的前16位是什么 这将是最后四个十六进制数字BEEF

答案 2 :(得分:0)

&安培;它与0xffff。

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

答案 3 :(得分:0)

这将为您提供32位数字作为四字节数组:

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

要将前两个字节作为带符号的16位数字:

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

将前两个字节作为无符号16位数:

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

这当然比使用位移或除法慢一点,但它正确处理符号位(最高位),使用位移或除法可能会遇到问题。

您还可以将前两个字节作为16位无符号数字并将其分配给整数:

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

(获取带符号的16位数并分配给整数意味着符号位也将被复制到整数的前16位,这可能是不希望的。)

如果您想要最后两个字节(最不重要)而不是前两个字节(最重要),只需将ToUInt16 / ToInt16调用中的索引从0更改为2.

答案 4 :(得分:0)

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

    'or
    s16 = (i >> 16) And &HFFFF 'DEAD