字符串到字节数组[重复]
Posted
技术标签:
【中文标题】字符串到字节数组[重复]【英文标题】:String to byte array [duplicate] 【发布时间】:2011-12-14 07:05:13 【问题描述】:可能重复:How do you convert Byte Array to Hexadecimal String, and vice versa, in C#?Convert hex string to byte array
我有一个这样的字符串: "021500010000146DE6D800000000000000003801030E9738"
我需要的是以下字节数组: 02 15 00 01 00 00 14 6D E6 D8 00 00 00 00 00 00 00 00 38 01 03 0E 97 38(每对数字是各自字节中的十六进制值)。
知道如何进行这种转换吗?谢谢!!
【问题讨论】:
你写信是为了做什么? “可能重复”是一个完全不同的问题。他不是在问如何使用某种编码将字符串编码为byte[]
。此处的字符串包含应转换为byte[]
的十六进制值。
我看不出这些问题是如何完全重复的。
你非常想要这个页面上的第二个例子:msdn.microsoft.com/en-us/library/bb311038.aspx。它的“肉”是 Convert.ToInt32(hex, 16) (第二个参数指定从 Base-16 转换,即 Hex)。我在 Google 上找到了这个:“C# parse hex”
我也看到了“重复”的帖子,我真的认为这完全不同。
【参考方案1】:
你非常想在这个 page 上第二个例子。 重要的部分是:
Convert.ToInt32(hex, 16);
第一个参数是一个 2 字符的字符串,指定一个十六进制值(例如 "DE"
)。
第二个参数指定从Base-16转换,即Hex。
示例中未显示将字符串拆分为两个字符的段,但这是您的问题所必需的。我相信它足够简单,您可以处理。
我通过 Google: "C# parse hex"
【讨论】:
【参考方案2】: string str = "021500010000146DE6D800000000000000003801030E9738";
List<byte> myBytes = new List<byte>();
try
while (!string.IsNullOrEmpty(str))
myBytes.Add(Convert.ToByte(str.Substring(0, 2), 16));
str = str.Substring(2);
catch (FormatException fe)
//handle error
for(int i = 0; i < myBytes.Count; i++)
Response.Write(myBytes[i].ToString() + "<br/>");
【讨论】:
Convert.ToByte
在int
上?我的意思是,过早的优化很糟糕,但是当最简单的方法也更快时......
@BenVoigt 啊,我发现在一次转换中可以执行正确的功能。谢谢!【参考方案3】:
var arr = new byte[s.Length/2];
for ( var i = 0 ; i<arr.Length ; i++ )
arr[i] = (byte)Convert.ToInt32(s.SubString(i*2,2), 16);
【讨论】:
这段代码真的很好用。但只有一个细节,正确的代码是“s.Substring”。谢谢大家。 可以使用 Convert.ToByte 代替 ToInt32。以上是关于字符串到字节数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章