我需要取一个整数值并将其转换,以便当它以十六进制表示时,数字会反转。例如:
Dim a As Integer = &H4321
Dim a_changedorder As Integer = ReverseHexDigits(a)
Console.Writeline(a_changedorder.ToString("X4")) ' Should output 1234
如何实现类似的ReverseHexDigits
方法?
作为第二个示例,&H4F2A
应该变为&HA2F4
。
答案 0 :(得分:3)
虽然Matt的方法可行,但将整数转换为十六进制字符串,反转字符串中字符的顺序,然后再次将其解析为整数是相当低效的。如果效率很重要,并且您只需要以两个字节的整数反转半字节,那么以下内容将起作用:
Public Function ReverseHexDigits(input As Integer) As Integer
Return ((input And &HF) << 12) Or
((input And &HF0) << 4) Or
((input And &HF00) >> 4) Or
((input And &HF000) >> 12)
End Function
然而,这令人困惑,因为它只能在较低的两个字节上运行。如果它对UShort
变量进行操作则会更清楚:
Public Function ReverseHexDigits(input As UShort) As UShort
Return ((input And CUShort(&HF)) << 12) Or
((input And CUShort(&HF0)) << 4) Or
((input And CUShort(&HF00)) >> 4) Or
((input And CUShort(&HF000)) >> 12)
End Function
答案 1 :(得分:1)
(我真的不明白你为什么要这样做...但是)只需将数值转换为字符串,reverse it然后转换回数值:
Dim a As UShort = &H4321
Dim hexCharArray As Char() = a.ToString("X4").ToCharArray
Array.Reverse(hexCharArray)
Dim hexStringReversed = New String(hexCharArray)
Dim a_changedorder As UShort = Convert.ToUInt16(hexStringReversed, 16)
确认输出正确:
Debug.WriteLine(a_changedorder.ToString("X4")) '1234
请注意,您应该使用UShort
,因为您只有两个字节,Integer
已签名且为4个字节