如何在Excel中反转数字字节并获取对应十进制值?
在Excel中实现数字的字节顺序反转
要实现你需要的字节反转功能(等效于Python代码int.from_bytes(bytes(reversed(num.to_bytes(7))))),可以用以下两种方法,优先推荐VBA宏,因为能避免Excel内置函数的精度限制:
VBA宏方法
这种方法能可靠处理7字节范围内的大数字,不会出现精度丢失:
- 打开Excel,按
Alt + F11打开VBA编辑器 - 插入一个新模块(右键点击工作簿→插入→模块)
- 粘贴以下代码:
Function ReverseByteOrder(decStr As String) As String Dim num As Variant Dim hexStr As String Dim reversedHex As String Dim i As Integer ' 将输入的十进制字符串转换为高精度数值 num = CDec(decStr) ' 转换为14位十六进制字符串(7字节,每字节对应2位十六进制,自动补前导零) hexStr = UCase(Right("00000000000000" & Hex(num), 14)) ' 反转字节顺序:从后往前每2位为一组拼接 reversedHex = "" For i = 13 To 1 Step -2 reversedHex = reversedHex & Mid(hexStr, i, 2) Next i ' 将反转后的十六进制转回十进制字符串 ReverseByteOrder = CStr(CDec("&H" & reversedHex)) End Function
- 回到Excel界面,在需要结果的单元格中输入公式
=ReverseByteOrder(A1)(A1为存储原始数字字符串的单元格),即可得到反转后的十进制数。
公式方法(有局限性)
Excel内置的HEX2DEC函数仅支持最大10位十六进制数(对应32位整数),而你的需求是7字节(14位十六进制),因此这个方法仅适用于较小的数字,不推荐用于示例中的大数字:
=HEX2DEC(MID(TEXT(DEC2HEX(A1),"00000000000000"),13,2)&MID(TEXT(DEC2HEX(A1),"00000000000000"),11,2)&MID(TEXT(DEC2HEX(A1),"00000000000000"),9,2)&MID(TEXT(DEC2HEX(A1),"00000000000000"),7,2)&MID(TEXT(DEC2HEX(A1),"00000000000000"),5,2)&MID(TEXT(DEC2HEX(A1),"00000000000000"),3,2)&MID(TEXT(DEC2HEX(A1),"00000000000000"),1,2))
公式逻辑:先将十进制转为14位补零的十六进制字符串,然后从后往前每2位拼接成反转后的十六进制,最后转回十进制。
内容的提问来源于stack exchange,提问作者Manuel Selva
相关产品推荐
相关产品推荐

