VBA ASCII转十六进制异常求助:字符串仅部分转换
解决VBA字符串转ASCII十六进制只转换一半的问题
看起来你的代码在处理字符串转十六进制时,只覆盖了前半部分字符,要么是变量声明出了问题,要么是循环逻辑没写对。咱们来拆解下问题:
问题根源推测
从错误结果能看出来,原字符串BFEBFBFF000406E3的前8个字符(BFEBFBFF)被正确转成了4246454246424646,但后面的000406E3全变成了00,大概率是这两种情况之一:
- 固定长度字符串声明错误:如果你的代码里写了类似
Dim strg As String * 8这种固定长度为8的变量,原字符串超过8位的部分会直接被截断,后续转换自然都是空字符的十六进制00。 - 循环逻辑遗漏:比如循环只执行了8次,没有遍历整个字符串的16个字符,导致后半段没被处理。
修正后的可运行代码
下面是能正确把每个字符转成对应ASCII十六进制的代码:
Sub StringToHex() Dim inputStr As String Dim outputHex As String Dim charIndex As Integer ' 读取A1单元格的输入字符串 inputStr = Range("A1").Value outputHex = "" ' 遍历字符串的每一个字符 For charIndex = 1 To Len(inputStr) ' 取出单个字符→转ASCII码→转十六进制→确保两位格式 outputHex = outputHex & Right("0" & Hex(Asc(Mid(inputStr, charIndex, 1))), 2) Next charIndex ' 将结果写入A6单元格 Range("A6").Value = outputHex End Sub
代码关键说明
Len(inputStr):获取输入字符串的总长度,保证循环能覆盖每一个字符。Mid(inputStr, charIndex, 1):逐个提取字符串里的单个字符。Asc(...):拿到字符对应的ASCII码值。Hex(...):把ASCII码转换成十六进制字符串。Right("0" & ..., 2):确保每个字符的十六进制结果是两位(比如字符0转成30,避免出现单字符的十六进制值)。
运行这段代码后,A6单元格会得到正确结果:42464542464246463030303430364533(注:你提到的正确结果末尾的DA应该是输入失误,原16位字符转换后应该是32位十六进制)。
内容的提问来源于stack exchange,提问作者Fuca
相关产品推荐
相关产品推荐

