字符串到字节数组[重复]

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.ToByteint 上?我的意思是,过早的优化很糟糕,但是当最简单的方法也更快时...... @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。

以上是关于字符串到字节数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

字节数组到十六进制字符数组的转换[重复]

字符串到字节数组类型转换[重复]

字节数组到字符串 - 一种更好的方法[重复]

十六进制字符串到字节数组 C# [重复]

如何在Go中将字节数组转换为字符串[重复]

如何在golang中将字节附加到字节数组?不是字节数组到字节数组切片等[重复]