You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET十六进制转字节数组代码转C#后格式错误的解决方法

问题分析与解决方案

错误原因

VB.NET里&H是十六进制字面量前缀,VB能自动把"&HXX"格式的字符串隐式转为Byte类型;但C#不识别&H前缀,且Convert.ToByte默认按十进制解析字符串,导致解析这类带&H的字符串时出现格式错误。另外你这段代码做了冗余操作——把十进制数值先转十六进制字符串再转回Byte,完全没必要。

解决方案

方案1:修正字符串解析逻辑

去掉&H前缀,直接指定用十六进制基数解析Conversion.Hex()返回的字符串:

byte[] bytes = new[] {
    Convert.ToByte(Conversion.Hex(127), 16),
    Convert.ToByte(Conversion.Hex(7), 16),
    Convert.ToByte(Conversion.Hex(170), 16),
    Convert.ToByte(Conversion.Hex(218), 16),
    Convert.ToByte(Conversion.Hex(228), 16),
    Convert.ToByte(Conversion.Hex(50), 16),
    Convert.ToByte(Conversion.Hex(1), 16),
    Convert.ToByte(Conversion.Hex(155), 16),
    Convert.ToByte(Conversion.Hex(171), 16),
    Convert.ToByte(Conversion.Hex(232), 16),
    Convert.ToByte(Conversion.Hex(127), 16)
};

方案2:直接转换原始数值(推荐)

所有原始数值都在Byte的取值范围(0-255)内,直接强制转换为Byte即可,省去多余的十六进制转换步骤:

byte[] bytes = new[] {
    (byte)127,
    (byte)7,
    (byte)170,
    (byte)218,
    (byte)228,
    (byte)50,
    (byte)1,
    (byte)155,
    (byte)171,
    (byte)232,
    (byte)127
};

方案3:用C#十六进制字面量写法

如果偏好直接写十六进制值,C#的十六进制前缀是0x,可读性更高:

byte[] bytes = new[] {
    0x7F,
    0x07,
    0xAA,
    0xDA,
    0xE4,
    0x32,
    0x01,
    0x9B,
    0xAB,
    0xE8,
    0x7F
};

内容的提问来源于stack exchange,提问作者StealthRT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:55:12