反转十六进制数字的顺序

时间:2015-12-01 15:25:26

标签: .net vb.net string hex endianness

我需要取一个整数值并将其转换,以便当它以十六进制表示时,数字会反转。例如:

Dim a As Integer = &H4321
Dim a_changedorder As Integer = ReverseHexDigits(a)
Console.Writeline(a_changedorder.ToString("X4")) ' Should output 1234

如何实现类似的ReverseHexDigits方法?

作为第二个示例,&H4F2A应该变为&HA2F4

2 个答案:

答案 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个字节