C# byte[] 与16进制字符串互相转换

这篇博客详细介绍了如何将byte数组转换成16进制字符串,以及如何将16进制字符串还原为byte数组。提供了两种不同的转换方法,包括使用BitConverter和循环遍历的方式,适用于.NET开发人员进行数据处理。
部署运行你感兴趣的模型镜像

byte[] 转16进制字符串

方法一、

BitConverter.ToString(resultArray).Replace("-", "")

方法二、

/// <summary> 
/// 字节数组转16进制字符串 
/// </summary> 
/// <param name="bytes"></param> 
/// <returns></returns> 
public static string byteToHexStr(byte[] bytes)
{
	string returnStr = "";
	if (bytes != null)
	{
		for (int i = 0; i < bytes.Length; i++)
		{
			returnStr += bytes[i].ToString("X2");
		}
	}
	return returnStr;
}

16进制的字符串转为byte[]

/// <summary>
/// 将16进制的字符串转为byte[]
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] StrToHexByte(string hexString)
{
	hexString = hexString.Replace(" ", "");
	if ((hexString.Length % 2) != 0)
	hexString += " ";
	byte[] returnBytes = new byte[hexString.Length / 2];
	for (int i = 0; i < returnBytes.Length; i++)
	returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
	return returnBytes;
}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

C# 中,将字节数组(`byte[]`)转换为十六进制字符串(hex string)是一个常见的需求,尤其是在处理加密、网络传输或文件操作时。可以通过多种方式实现这一转换,以下是一些常用的方法,并附有代码示例。 ### 使用 `BitConverter` 类进行转换 ```csharp byte[] data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; string hexString = BitConverter.ToString(data).Replace("-", ""); ``` 此方法会将字节数组转换为形如 `123456789ABC` 的字符串。`BitConverter.ToString` 会在每个字节之间插入连字符 `-`,因此需要调用 `Replace("-", "")` 来移除这些连字符[^1]。 ### 使用 `StringBuilder` 和 `Convert.ToString` ```csharp public string ByteArrayToHexString(byte[] data) { StringBuilder sb = new StringBuilder(data.Length * 2); foreach (byte b in data) { sb.Append(b.ToString("X2")); } return sb.ToString(); } ``` 该方法通过遍历字节数组,将每个字节转换为两位的十六进制字符串,并使用 `StringBuilder` 来构建最终结果。`"X2"` 格式化字符串表示使用大写的十六进制数字,并确保每个字节始终输出两位数[^1]。 ### 使用 LINQ 简化代码 ```csharp byte[] data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; string hexString = string.Concat(data.Select(b => b.ToString("X2"))); ``` 此方法使用 LINQ 查询表达式,将每个字节转换为十六进制字符串,并通过 `string.Concat` 将所有字符串连接起来,形成最终的十六进制字符串。这种方法代码简洁,可读性强[^1]。 ### 使用 `SoapHexBinary` 类(适用于 XML 相关操作) ```csharp using System.Runtime.Remoting.Metadata.W3cXsd2001; byte[] data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; SoapHexBinary shb = new SoapHexBinary(data); string hexString = shb.ToString(); ``` 如果需要在 XML 中使用十六进制字符串,可以使用 `SoapHexBinary` 类,它提供了一个标准的方式来处理字节数组十六进制字符串之间的转换。 ### 性能优化建议 对于大规模数据处理,建议使用 `StringBuilder` 或 `Span<T>` 相关方法,以减少内存分配和提高执行效率。例如,可以使用 `stackalloc` 来在栈上分配缓冲区,适用于小规模数据的快速处理: ```csharp public unsafe string FastByteArrayToHexString(byte[] data) { char[] hexChars = "0123456789ABCDEF".ToCharArray(); int length = data.Length; char* result = stackalloc char[length * 2]; for (int i = 0; i < length; i++) { byte b = data[i]; result[i * 2] = hexChars[(b >> 4) & 0xF]; result[i * 2 + 1] = hexChars[b & 0xF]; } return new string(result, 0, length * 2); } ``` 此方法通过直接操作指针和字符数组,避免了频繁的字符串拼接操作,从而提升了性能。但需要注意,此方法使用了 `unsafe` 代码,需在项目设置中启用不安全代码编译[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BeanGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值