如何将字符串转换为二进制,然后转换为十六进制值?

如何将字符串转换为二进制,然后转换为十六进制值?

在一列中,我有一个编码为字符串类型的位串。在另一列中,我希望具有相同的位(可能以 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

相关内容