0

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

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

现在我只想做相反的事情

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

这个怎么做??

4

6 回答 6

3

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

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

或者正如Ben Voigt 建议的那样:

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是一种更紧凑、更高效的随机字节编码方式,您无需创建自定义解码器:

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"
于 2013-04-08T06:51:04.080 回答
2

使用Encoding.UTF8.GetBytes方法;

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

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

于 2013-04-08T06:51:28.310 回答
1

你可以这样做:

byte[] value = Encoding.Default.GetBytes(stValue);
于 2013-04-08T06:50:46.787 回答
0

根据您想要的转换,有不同的方法可以实现这一目标。那里System.Text.EncodingUTF8Unicode, 和ASCII。所以如你所愿

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

请参阅此处以获取参考。

于 2013-04-08T06:54:03.070 回答
0

尝试这个

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,

于 2013-04-08T06:54:46.063 回答
0
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

于 2013-04-08T07:08:37.500 回答