十六进制字符串的字节转换在 C# 中使用字母字符“G”及更高版本一直失败

Posted

技术标签:

【中文标题】十六进制字符串的字节转换在 C# 中使用字母字符“G”及更高版本一直失败【英文标题】:Byte Conversion From Hex String Keeps Failing With Alphabet characters "G" and upwards in C# 【发布时间】:2014-01-08 21:42:17 【问题描述】:

我正在尝试构建一个简单的 XOR 函数,该函数可以从单个字符中解密十六进制密钥。它适用于多个字符和单个字符......但仅限于从“A”到“F”。从“G”开始,它不断抛出“FormatException”。

这是问题函数,用两个字符串传递:

    // For Reference:
    // strHexKey = "G";
    // strHexInput = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736"

    private string SCXOR_Update(string strHexKey, string strHexInput)
    
        byte[] buffer1 = hexbuffer(strHexInput);
        byte buffer2 = Convert.ToByte(Convert.ToInt32(strHexKey, 16));
        byte[] result = buffer1;

        for (int i = 0; i < (strHexInput.Length / 2); i++)
        
            result[i] = (byte)(buffer1[i] ^ buffer2);
        

        return BitConverter.ToString(result).Replace("-", "");
    

异常在“byte buffer2”行抛出,并且仅在从字母“G”向上推进时发生。

知道我错过了什么吗?一定是在瞪我?!

提前致谢!

【问题讨论】:

G 不是有效的十六进制值 【参考方案1】:

十六进制是a base 16 counting system。它仅包含以下数字 - 尽管也经常使用小写字符:

0123456789ABCDEF

【讨论】:

欲了解更多信息,请访问en.wikipedia.org/wiki/Hexadecimal 更多有趣的阅读请参阅en.wikipedia.org/wiki/Finger_binary :) 啊,我明白了!认为这将是显而易见的事情!谢谢大家:D

以上是关于十六进制字符串的字节转换在 C# 中使用字母字符“G”及更高版本一直失败的主要内容,如果未能解决你的问题,请参考以下文章

从字节数组转换为字符串十六进制c# [重复]

使用 C#,将包含二进制数据的字符串转换为字节数组的最有效方法是啥

C# 校验并转换 16 进制字符串到字节数组

C# 字节数组各进制字符串数据互转

十六进制字符串到字节数组 C# [重复]

如何将十六进制字符串转换为字节数组? [复制]