请原谅我在这里缺乏知识,但有人可以告诉我如何获得32位十六进制数的前16位。
答案 0 :(得分:5)
这取决于你所说的“第一”。给定一个数字,例如0xdeadbeef
,您会认为0xdead
或0xbeef
是“第一个”吗?
如果是前者,则将数字除以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