1

我有一个字符串,想使用 C# 将其转换为十六进制值的字节数组。
例如,“Hello World!” to byte[] val=new byte[] {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21};,

我在将字符串值转换为十六进制十进制中看到以下代码

string input = "Hello World!";
char[] values = input.ToCharArray();
foreach (char letter in values)
{
     // Get the integral value of the character.
     int value = Convert.ToInt32(letter);
     // Convert the decimal value to a hexadecimal value in string form.
     string hexOutput = String.Format("0x{0:X}", value);                
     Console.WriteLine("Hexadecimal value of {0} is {1}", letter, hexOutput);
}

我想把这个值放到字节数组中,但不能这样写

byte[] yy = new byte[values.Length];
yy[i] = Convert.ToByte(Convert.ToInt32(hexOutput));

我尝试从如何将字符串转换为十六进制字节数组?我传递了十六进制值 48656C6C6F20576F726C6421 但我得到的十进制值不是十六进制。

public byte[] ToByteArray(String HexString)
{
    int NumberChars = HexString.Length;
    byte[] bytes = new byte[NumberChars / 2];
    for (int i = 0; i < NumberChars; i += 2)
    {
        bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
    }
    return bytes;
}

我还尝试了如何将十六进制字符串转换为字节数组?

但是一旦我使用 Convert.ToByte 或 byte.Parse ,值就会变为十进制值。我应该怎么做?

提前致谢

我想将 0x80(即 128)发送到串行端口,但是当我将相当于 128 的字符复制并粘贴到变量“输入”并转换为字节时,我得到了 63(0x3F)。所以我想我需要发送十六进制数组。我想我有错误的想法。请看屏幕截图。

在此处输入图像描述

现在,我解决了这个问题来组合字节数组。

string input = "Hello World!";
byte[] header = new byte[] { 2, 48, 128 };
byte[] body = Encoding.ASCII.GetBytes(input);
4

4 回答 4

3

十六进制与此无关,您想要的结果只不过是包含 ASCII 代码的字节数组。

尝试Encoding.ASCII.GetBytes(s)

于 2013-05-14T05:29:58.680 回答
0

It seems like you’re mixing converting to array and displaying array data.

When you have array of bytes it’s just array of bytes and you can represent it in any possible way binary, decimal, hexadecimal, octal, whatever… but that is only valid if you want to visually represent these.

Here is a code that manually converts string to byte array and then to array of strings in hex format.

string s1 = "Stack Overflow :)";
byte[] bytes = new byte[s1.Length];
for (int i = 0; i < s1.Length; i++)
{
      bytes[i] = Convert.ToByte(s1[i]);
}

List<string> hexStrings = new List<string>();

foreach (byte b in bytes)
{
     hexStrings.Add(Convert.ToInt32(b).ToString("X"));
}
于 2013-05-14T09:26:33.530 回答
0

您的要求有些奇怪:

我有一个字符串,想 使用 C#将其转换为十六进制值的字节数组。

一个字节只是一个 8 位的值。您可以将其表示为十进制(例如 16)或十六进制(例如 0x10)。

那么,你真正想要的是什么?

于 2013-05-14T05:34:14.427 回答
0

如果你真的想得到一个包含字节数组的十六进制表示的字符串,你可以这样做:

public static string BytesAsString(byte[] bytes)
{
    string hex = BitConverter.ToString(bytes); // This puts "-" between each value.
    return hex.Replace("-","");                // So we remove "-" here.
}
于 2013-05-14T06:16:12.477 回答