如何做到 byte[] 和 十六进制 互转?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何做到 byte[] 和 十六进制 互转?相关的知识,希望对你有一定的参考价值。
咨询区
alextansc:
请问我如何实现将 byte[]
和 十六进制的string 进行互转?
回答区
balrob:
如果你的程序是基于 .NET5 的,可以使用 Convert 下新增的两个方法 ToHexString
和 FromHexString
,参考下面两个方法的定义。
//
// Summary:
// Converts an array of 8-bit unsigned integers to its equivalent string representation
// that is encoded with uppercase hex characters.
//
// Parameters:
// inArray:
// An array of 8-bit unsigned integers.
//
// Returns:
// The string representation in hex of the elements in inArray.
//
// Exceptions:
// T:System.ArgumentNullException:
// inArray is null.
//
// T:System.ArgumentOutOfRangeException:
// inArray is too large to be encoded.
public static string ToHexString(byte[] inArray);
//
// Summary:
// Converts the specified string, which encodes binary data as hex characters, to
// an equivalent 8-bit unsigned integer array.
//
// Parameters:
// s:
// The string to convert.
//
// Returns:
// An array of 8-bit unsigned integers that is equivalent to s.
//
// Exceptions:
// T:System.ArgumentNullException:
// s is null.
//
// T:System.FormatException:
// The length of s, is not zero or a multiple of 2.
//
// T:System.FormatException:
// The format of s is invalid. s contains a non-hex character.
public static byte[] FromHexString(string s);
Mykroft:
在 W3cXsd2001 命名空间下有一个可以实现 byte[] 到 hex 之间的转换方法,我觉得可以满足你的需求,参考如下:
using System.Runtime.Remoting.Metadata.W3cXsd2001;
public static byte[] GetStringToBytes(string value)
{
SoapHexBinary shb = SoapHexBinary.Parse(value);
return shb.Value;
}
public static string GetBytesToString(byte[] value)
{
SoapHexBinary shb = new SoapHexBinary(value);
return shb.ToString();
}
Waleed Eissa:
我最近刚好也遇到了这个问题,我是这么解决的。
byte[] bytes = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256}
Console.WriteLine( BitConverter.ToString(bytes));
但用它性能会比较慢,所以基于它我做了一个版本优化,性能是它的8倍以上,参考如下:
private static string ByteArrayToHex(byte[] barray)
{
char[] c = new char[barray.Length * 2];
byte b;
for (int i = 0; i < barray.Length; ++i)
{
b = ((byte)(barray[i] >> 4));
c[i * 2] = (char)(b > 9 ? b + 0x37 : b + 0x30);
b = ((byte)(barray[i] & 0xF));
c[i * 2 + 1] = (char)(b > 9 ? b + 0x37 : b + 0x30);
}
return new string(c);
}
点评区
没想到 .NET5 中已经有了 FromHexString,ToHexString
方法, Convert 类越来越强大了,工作效率看样子又可以提高了。
以上是关于如何做到 byte[] 和 十六进制 互转?的主要内容,如果未能解决你的问题,请参考以下文章
Java File ,byte[] , 二进制字符串之间互转