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

C#计算XOR校验和时十六进制字符串‘2E’转换报错问题

解决十六进制字符串转byte时的格式错误问题

你遇到的问题是因为Convert.ToByte(string)默认以十进制解析字符串,而"2E"里的E会被当作科学计数法的标识,导致解析失败。要正确解析十六进制字符串,必须显式指定解析格式为十六进制。

修正后的代码

public void GetCheckSum()
{
    //test data2
    //预期结果42
    var hexInput = "54-33-30-30-20-20-20-20-38-2E-30-03";

    // 指定按十六进制解析每个分段
    var splitByte = hexInput.Split("-").Select(hex => Convert.ToByte(hex, 16)); 
    byte[] byteData = splitByte.ToArray();

    byte checksumTest = 0; // 直接初始化0,无需new byte()

    for(int i = 0; i < byteData.Length; i++)
    {
        checksumTest = (byte)(checksumTest ^ byteData[i]);
    }

    Console.WriteLine(checksumTest); // 输出42,符合预期
}

额外优化:用LINQ简化XOR计算

可以用Aggregate方法替代循环,让代码更简洁:

public void GetCheckSum()
{
    var hexInput = "54-33-30-30-20-20-20-20-38-2E-30-03";
    byte checksum = hexInput.Split("-")
                           .Select(hex => Convert.ToByte(hex, 16))
                           .Aggregate((current, next) => (byte)(current ^ next));
    Console.WriteLine(checksum); // 输出42
}

注意点

  • 解析十六进制字符串时,必须传入第二个参数16,告诉Convert.ToByte按十六进制规则解析,这样不管是数字还是A-F(大小写都支持)的十六进制字符都能正确转换。
  • 原代码里checksumTest和checkSumTest大小写不一致,已统一修正,避免编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:26:17