How to convert a string to byte array
我有一个字符串,想用C把它转换成十六进制值的字节数组。例如,"你好,世界!"至字节[]val=新字节[]0x48、0x65、0x6c、0x6c、0x6f、0x20、0x57、0x6f、0x72、0x6c、0x64、0x21,
我在将字符串值转换为十六进制十进制时看到以下代码
1 2 3 4 5 6 7 8 9 10 | 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); } |
我希望这个值进入字节数组,但不能这样写
1 2 |
我试着用这个代码来引用如何将字符串转换成十六进制字节数组?在这里,我传递了十六进制值48656C66F20576F726C6421,但得到的是十进制值而不是十六进制值。
1 2 3 4 5 6 7 8 9 10 | 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.to byte或byte.parse,值就变为十进制值。我该怎么办?
提前谢谢
我想将0x80(即128)发送到串行端口,但当我复制和粘贴相当于128的字符到变量'input'并转换为byte时,得到63(0x3f)。所以我想我需要发送十六进制数组。我想我搞错主意了。请看屏幕截图。
现在,我解决这个问题来组合字节数组。
1 2 3 | string input ="Hello World!"; byte[] header = new byte[] { 2, 48, 128 }; byte[] body = Encoding.ASCII.GetBytes(input); |
十六进制与此无关,您希望得到的结果只是包含ASCII代码的字节数组。
试试
似乎您正在混合转换为数组并显示数组数据。
当你有字节数组时,它只是一个字节数组,你可以用任何可能的方式来表示它:二进制、十进制、十六进制、八进制等等,但是只有当你想用视觉方式来表示它们时,这才是有效的。
下面是一个代码,它手动将字符串转换为字节数组,然后再转换为十六进制格式的字符串数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
如果您真的想要得到一个包含字节数组十六进制表示的字符串,下面是您可以这样做的方法:
1 2 3 4 5 | public static string BytesAsString(byte[] bytes) { string hex = BitConverter.ToString(bytes); // This puts"-" between each value. return hex.Replace("-",""); // So we remove"-" here. } |
你的要求有些奇怪:
I have a string and want to convert it to a byte array of hex value
using C#.
字节只是一个8位的值。您可以将其显示为十进制(例如16)或十六进制(例如0x10)。
那么,你真正想要什么?