下面我将详细讲解C#中16进制与字符串、字节数组之间的转换。
字符串与16进制转换
字符串转16进制
我们可以使用BitConverter
和Encoding
提供的方法来将字符串转化为16进制。
以下是将字符串转化为16进制的示例代码:
string str = "Hello World!";
byte[] bytes = Encoding.UTF8.GetBytes(str); // 将字符串编码成字节数组
string hexStr = BitConverter.ToString(bytes).Replace("-", ""); // 将字节数组转换成16进制字符串
Console.WriteLine(hexStr); // 48-65-6C-6C-6F-20-57-6F-72-6C-64-21
在上面的代码中,我们首先将字符串"Hello World!"
使用UTF8编码成字节数组,然后使用BitConverter.ToString()
将其转换为16进制字符串。由于BitConverter.ToString()
得到的结果是用-
分隔的,因此还需要通过Replace()
方法将其替换成不带分隔符的字符串。
16进制转字符串
我们可以使用Encoding
的GetString()
方法将16进制字符串转化为字符串。需要先将16进制字符串转化为字节数组,再用Encoding
将其解码成字符串。
以下是将16进制转化为字符串的示例代码:
string hexStr = "48-65-6C-6C-6F-20-57-6F-72-6C-64-21";
byte[] bytes = new byte[hexStr.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(hexStr.Substring(i * 2, 2), 16);
}
string str = Encoding.UTF8.GetString(bytes); // 将字节数组解码成字符串
Console.WriteLine(str); // Hello World!
在上面的代码中,我们首先将16进制字符串按照-
进行分割,得到一个字符串数组,然后将这个字符串数组中的每一个字符串转化为一个字节(byte)类型的数值。最后,我们使用Encoding
中的GetString()
方法将字节数组转化为字符串。
字节数组与16进制转换
字节数组转16进制
我们可以使用BitConverter
提供的方法将字节数组转化为16进制。
以下是将字节数组转化为16进制的示例代码:
byte[] bytes = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21 };
string hexStr = BitConverter.ToString(bytes).Replace("-", ""); // 将字节数组转换成16进制字符串
Console.WriteLine(hexStr); // 48656C6C6F20576F726C6421
在上面的代码中,我们首先创建一个字节数组,然后使用BitConverter.ToString()
将其转换成16进制字符串。由于BitConverter.ToString()
得到的结果是用-
分隔的,因此还需要通过Replace()
方法将其替换成不带分隔符的字符串。
16进制转字节数组
我们可以使用Convert
提供的方法将16进制字符串转化为字节数组。
以下是将16进制转化为字节数组的示例代码:
string hexStr = "48656C6C6F20576F726C6421";
byte[] bytes = new byte[hexStr.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(hexStr.Substring(i * 2, 2), 16);
}
Console.Write("[ ");
for (int i = 0; i < bytes.Length; i++)
{
Console.Write("0x" + bytes[i].ToString("X2") + " ");
}
Console.WriteLine("]"); // [0x48 0x65 0x6C 0x6C 0x6F 0x20 0x57 0x6F 0x72 0x6C 0x64 0x21]
在上面的代码中,我们首先将16进制字符串按照长度为2进行分割,得到一个字符串数组,然后将这个字符串数组中的每一个字符串转化为一个字节(byte)类型的数值组成字节数组。最后,我们使用循环打印出字节数组中的每一个元素(Hex表示)。
希望以上内容对你有帮助,谢谢!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 16进制与字符串、字节数组之间的转换 - Python技术站