反转十六进制数字的顺序

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