反转十六进制数字的顺序
Reverse the order of Hex digits
我需要取一个整数值并将其转换,以便当它以十六进制表示时,数字被反转。例如:
Dim a As Integer = &H4321
Dim a_changedorder As Integer = ReverseHexDigits(a)
Console.Writeline(a_changedorder.ToString("X4")) ' Should output 1234
我怎样才能实现像那样工作的 ReverseHexDigits
方法?
作为第二个例子,&H4F2A
应该变成 &HA2F4
。
(我真的不明白你为什么要这样做......但是)只需将数值转换为字符串,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 个字节
虽然马特的方法可行,但将整数转换为十六进制字符串,反转字符串中字符的顺序,然后再次将其解析回整数,效率很低。如果效率很重要,并且您只需要反转两个字节整数中的半字节,那么下面的方法就可以了:
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
我需要取一个整数值并将其转换,以便当它以十六进制表示时,数字被反转。例如:
Dim a As Integer = &H4321
Dim a_changedorder As Integer = ReverseHexDigits(a)
Console.Writeline(a_changedorder.ToString("X4")) ' Should output 1234
我怎样才能实现像那样工作的 ReverseHexDigits
方法?
作为第二个例子,&H4F2A
应该变成 &HA2F4
。
(我真的不明白你为什么要这样做......但是)只需将数值转换为字符串,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 个字节
虽然马特的方法可行,但将整数转换为十六进制字符串,反转字符串中字符的顺序,然后再次将其解析回整数,效率很低。如果效率很重要,并且您只需要反转两个字节整数中的半字节,那么下面的方法就可以了:
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