我已完成以下操作,将字节数组转换为字符串以存储在db
中byte[] value;
String stValue = BitConverter.ToString(value);
现在我只想做相反的事情
String stValue;
byte[] value= (Convert) stValue ???
怎么做?
答案 0 :(得分:3)
由于您使用的是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 ]
但是,通常不需要才能使用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"
答案 1 :(得分:1)
你可以这样做:
byte[] value = Encoding.Default.GetBytes(stValue);
答案 2 :(得分:1)
byte[] value = Encoding.Default.GetBytes(stValue);
将指定字符串中的所有字符编码为序列 字节。
答案 3 :(得分:0)
根据您希望的转换,有不同的方法来实现这一目标。有System.Text.Encoding
,其中有UTF8
,Unicode
和ASCII
。所以你想要
byte[] strArray = System.Text.Encoding.(UTF8 | ASCII | Unicode).GetBytes(str);
请参阅here以获取参考。
答案 4 :(得分: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,
答案 5 :(得分: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