在一列中,我有一个编码为字符串类型的位串。在另一列中,我希望具有相同的位(可能以 0 开头),但作为二进制值类型。最终,我希望在第三列中以十六进制表示形式(字符串或十六进制类型,无所谓)表示它。
这是怎么做的?我是否需要为此编写一些程序,或者是否有更快的方法?
输入单元格包含以下字符串:00000100100011000100100011
我希望获得字符串:0123123
答案1
只需使用 mid(cell, index_start, len) 分割二进制数,然后使用 bin2hex() 逐段更改基数,然后进行连接(通过 CONCATENATE() - 单元格引用由 & 符号分隔)。
示例行:
0010000100000001110100101 在一个单元格 X1 中
将其分成 ceil(len(X1)/8)=4 个单元,每组获得 8 位。
要将其拆分为 4 个单元格,请使用 =MID($X1,start_pos,8),其中 startpos 是 X1 中位串的起始索引(从 1 开始)
在另一组 4 个单元格中,通过使用 =BIN2HEX(8bitNrCell,2) 将前 4 个单元格转换为十六进制
使用 =CONCATENATE(1stcell&2ndcell&thirdcell&fourthcell) 连接前 4 个单元格
答案2
Public Function CRY_BIN2HEX(arg As String) As String
Dim rez As String
Dim lcnt As Integer
For lcnt = 1 To WorksheetFunction.RoundUp(Len(arg) / 4, 0)
If lcnt = 1 Then
rez = WorksheetFunction.Bin2Hex(Mid(arg, 1, 4))
Else
rez = rez & WorksheetFunction.Bin2Hex(Mid(arg, (lcnt * 4) - 3, 4))
End If
Next lcnt
CRY_BIN2HEX = rez
End Function