有转换为十六进制的其他方法吗?

时间:2019-05-27 06:02:00

标签: c#

我正在尝试将一些信息写入需要我对该字符串进行编码的特殊设备,并引用“要写入的偶数字节(1-32,以10为基数)”

示例字符串提供了“ DE AD BE EF CA FE”(有效)。 我已将字符串转换为十进制,并从十进制转换为十六进制。

string TextToConvert = "Test Andrei";
            TextToConvert=ConvertStringToHex(TextToConvert, Encoding.UTF8);

            List<char> Chars = TextToConvert.ToCharArray().ToList();
            string CharValue = "";
            string secondHexConvert = "";
            foreach(char c in Chars)
            {
                CharValue+=Convert.ToInt32(c);
                secondHexConvert+=Convert.ToString(c, 16)+" ";
            }
            string hexValue = String.Format("{0:X}", CharValue)+" ";

我在互联网上发现了一种可以转换为十六进制的工具。问题是我不知道那是什么类型的编码。网站是这样的:https://codebeautify.org/decimal-hex-converter 从十进制“ 841011151163265110100114101105”到十六进制=“ a9d741e82c990000000000000”

2 个答案:

答案 0 :(得分:2)

要将如此大的整数转换为十六进制字符串,请使用恰当命名的BigInteger类型:

var num = BigInteger.Parse("841011151163265110100114101105");
string hex = num.ToString("X");
Console.WriteLine(hex);

将输出:

0A9D741E82C98FC6A137B75371

但这是一个障碍,您在问题中显示的输出有些不同,让我将其与上面的代码产生的内容一起显示:

0A9D741E82C98FC6A137B75371
 a9d741e82c990000000000000

如您所见,数字以相同的开头,但您的示例随后以很多零结尾。

我了解发生这种情况的唯一方法是,实际上他们没有使用可以容纳那么多有效数字的类型,因此会出现舍入错误。

许多动态编程语言都允许您互换使用浮点数和整数,我想这是发生了什么,一个只能容纳17-18个有效数字的浮点类型,或者使用了这样的浮点类型,并且您失去了精度。但是,.NET不具有将浮点类型转换为十六进制的内置支持。

您可以看到.NET通过转换回来产生确切的值:

Console.WriteLine(BigInteger.Parse(hex, System.Globalization.NumberStyles.HexNumber));

输出:

841011151163265110100114101105

换句话说,我不确定您能否在.NET中获得完全相同的结果。

必然结果:请勿使用该网站进行这种转换!

答案 1 :(得分:1)

您可以使用以下代码将字符串转换为十六进制:

     public static string ConvertStringToHex(String input, System.Text.Encoding encoding)
    {
         Byte[] stringBytes = encoding.GetBytes(input);
        StringBuilder sbBytes = new StringBuilder(stringBytes.Length * 2);
        foreach (byte b in stringBytes)
         {
             sbBytes.AppendFormat("{0:X2}", b);
        }
        return sbBytes.ToString();
    }

您只需使用以下命令即可调用它:

string testString = "11111111";
string hex = ConvertStringToHex(testString, System.Text.Encoding.Unicode);