【问题标题】:Parse String to byte array C# [duplicate]将字符串解析为字节数组C# [重复]
【发布时间】:2013-03-30 04:04:14
【问题描述】:

我已完成以下操作将字节数组转换为字符串以存储在数据库中

byte[] value;
String stValue = BitConverter.ToString(value);

现在我只想做相反的事情

String stValue;
byte[] value= (Convert) stValue ???

如何做到这一点??

【问题讨论】:

  • 您没有对此执行一次谷歌搜索,是吗?
  • 在进行 Encoding.Default.GetBytes(stValue);
  • @Shekhar 这是我需要的谢谢

标签: c# asp.net


【解决方案1】:

由于您使用的是BitConverter,因此您获得的字符串的格式特别不友好。要反转这个过程,您可以编写一个自定义方法来反序列化字节,如下所示:

public static byte[] GetBytes(string value)
{
    return value.Split('-').Select(s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber)).ToArray();
}

或作为 Ben Voigt suggests:

public static byte[] GetBytes(string value)
{
    return Array.ConvertAll(value.Split('-'), s => byte.Parse(s, System.Globalization.NumberStyles.HexNumber));
}
...

var originalBytes = new byte[] { 1, 2, 3, 4, 5 };
var stValue = BitConverter.ToString(originalBytes); // "01-02-03-04-05"
var bytes = GetBytes(stValue); // [ 1, 2, 3, 4, 5 ]

但是,通常需要使用BitConverterBase64 是一种更紧凑、更高效的随机字节编码方式,您无需创建自定义解码器:

var originalBytes = new byte[] { 1, 2, 3, 4, 5 };
var stValue = Convert.ToBase64String(originalBytes); // "AQIDBAU="
var bytes = Convert.FromBase64String(stValue); // [ 1, 2, 3, 4, 5 ]

另一方面,Encoding 类提供了类似的在字符串和字节之间进行转换的功能。 虽然给定的编码可能无法将随机的字节序列转换为字符串,因此最好仅在您首先知道字符串有效时才使用此方法:

var originalValue = "Hello World";
var bytes = Encoding.UTF8.GetBytes(originalValue); // [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100 ]
var stValue = Encoding.UTF8.GetString(bytes); // "Hello World"

【讨论】:

  • 它给了我不同的价值
  • 我收到以下错误。 (参数 1:无法从 'string' 转换为 'double')同时使用 byte[] value = BitConverter.GetBytes(stValue);
  • @LynAs 我很抱歉,我可以发誓 BitConverter.GetBytes(string) 被覆盖,我已经用几个不同的替代方案更新了我的答案。
  • 对于第一种情况,Array.ConvertAll 比 LINQ 好一点(不需要额外的ToArray()
  • @BenVoigt 好点。为了完整起见,我已经更新了。
【解决方案2】:

使用Encoding.UTF8.GetBytes方法;

byte[] value = Encoding.UTF8.GetBytes(stValue);

将指定字符串中的所有字符编码成一个序列 字节。

【讨论】:

    【解决方案3】:

    你可以这样做:

    byte[] value = Encoding.Default.GetBytes(stValue);
    

    【讨论】:

      【解决方案4】:

      根据您想要的转换,有不同的方法可以实现这一目标。有System.Text.EncodingUTF8UnicodeASCII。随心所欲

      byte[] strArray = System.Text.Encoding.(UTF8 | ASCII | Unicode).GetBytes(str);
      

      参考here

      【讨论】:

        【解决方案5】:

        试试这个

        const string input = "Dot Net Perls";
        
            // Invoke GetBytes method.
            // ... You can store this array as a field!
            byte[] array = Encoding.ASCII.GetBytes(input);
        
            // Loop through contents of the array.
            foreach (byte element in array)
            {
                Console.WriteLine("{0} = {1}", element, (char)element);
            }
        

        输出

        68 = D, 111 = ○, 116 = 吨, 32 =, 78 = N, 101 = e, 116 = 吨, 32 =, 80 = P, 101 = e, 114 = r, 108 = l, 115 = 秒,

        【讨论】:

          【解决方案6】:
          String[] arr=str.Split('-');
          byte[] array=new byte[arr.Length];
          for(int i=0; i<arr.Length; i++) array[i]=Convert.ToByte(arr[i],16);
          

          这是我需要的。谢谢@Shekhar

          【讨论】:

            猜你喜欢
            • 2018-06-25
            • 1970-01-01
            • 2012-11-23
            • 1970-01-01
            • 1970-01-01
            • 2020-11-19
            • 2021-08-03
            • 2013-07-24
            • 2017-09-21
            相关资源
            最近更新 更多