关于ASP.NET:将字符串解析为字节数组C#

Parse String to byte array C#

本问题已经有最佳答案,请猛点这里访问。

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

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

现在我只想做相反的事

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

如何做到这一点??


因为您使用的是BitConverter,所以得到的字符串的格式不太友好。要反转此过程,可以编写自定义方法来反序列化如下字节:

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

或者正如本·沃伊特所说:

1
2
3
4
5
6
7
8
9
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 ]

但是,通常不需要使用BitConverter。base64是一种更紧凑和高效的随机字节编码方法,您不必创建自定义解码器:

1
2
3
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类提供了在字符串和字节之间转换的类似功能。尽管给定的编码可能无法将随机字节序列转换为字符串,因此最好仅在知道字符串首先有效的情况下使用此方法:

1
2
3
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"


采用Encoding.UTF8.GetBytes法;

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

Encodes all the characters in the specified string into a sequence of
bytes.


你可以这样做:

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

1
2
3
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


试试这个

1
2
3
4
5
6
7
8
9
10
11
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=O,116=t,32=78=n,101=E,116=t,32=80=P,101=E,114=R,108=L,115=S,


根据您想要的转换,有不同的方法来实现这一点。有System.Text.EncodingUTF8UnicodeASCII。照你的意愿

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

请参阅此处以获取参考。