我有一个字节数组,我想存储为字符串.我可以这样做:
byte[] array = new byte[] { 0x01, 0x02, 0x03, 0x04 };
string s = System.BitConverter.ToString(array);
// Result: s = "01-02-03-04"
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.有谁知道我怎么回到阵列?没有BitConverter.GetBytes()的重载,它接受一个字符串,这似乎是一个讨厌的解决方法,将字符串分解为一个字符串数组,然后转换它们中的每一个.
所讨论的数组可以是可变长度的,可能是大约20个字节.
Cod*_*Tao 23
不是内置方法,而是实现.(虽然可以在没有拆分的情况下完成).
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);
Run Code Online (Sandbox Code Playgroud)
没有拆分的方法:(对字符串格式做出许多假设)
int length=(s.Length+1)/3;
byte[] arr1=new byte[length];
for (int i = 0; i < length; i++)
arr1[i] = Convert.ToByte(s.Substring(3 * i, 2), 16);
Run Code Online (Sandbox Code Playgroud)
还有一种方法,没有分裂或子串.如果你将它提交给源代码控制,你可能会被枪杀.我对这些健康问题不承担任何责任.
int length=(s.Length+1)/3;
byte[] arr1=new byte[length];
for (int i = 0; i < length; i++)
{
char sixteen = s[3 * i];
if (sixteen > '9') sixteen = (char)(sixteen - 'A' + 10);
else sixteen -= '0';
char ones = s[3 * i + 1];
if (ones > '9') ones = (char)(ones - 'A' + 10);
else ones -= '0';
arr1[i] = (byte)(16*sixteen+ones);
}
Run Code Online (Sandbox Code Playgroud)
(基本上在两个字符上实现base16转换)
Guf*_*ffa 22
你可以自己解析字符串:
byte[] data = new byte[(s.Length + 1) / 3];
for (int i = 0; i < data.Length; i++) {
data[i] = (byte)(
"0123456789ABCDEF".IndexOf(s[i * 3]) * 16 +
"0123456789ABCDEF".IndexOf(s[i * 3 + 1])
);
}
Run Code Online (Sandbox Code Playgroud)
我认为,最好的解决方案是使用扩展:
byte[] data = s.Split('-').Select(b => Convert.ToByte(b, 16)).ToArray();
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 17
如果您不需要该特定格式,请尝试使用Base64,如下所示:
var bytes = new byte[] { 0x12, 0x34, 0x56 };
var base64 = Convert.ToBase64String(bytes);
bytes = Convert.FromBase64String(base64);
Run Code Online (Sandbox Code Playgroud)
Base64也将大大缩短.
如果您需要使用该格式,这显然无济于事.
byte[] data = Array.ConvertAll<string, byte>(str.Split('-'), s => Convert.ToByte(s, 16));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39025 次 |
最近记录: |