对JustinStolle的编辑的改进(Eran Yogev对BlockCopy的使用)。
所提出的解决方案确实比使用编码更快。问题是它不适用于编码长度不均匀的字节数组。如给定的那样,它引发了越界异常。从字符串解码时,将长度增加1会留下尾随字节。
对我来说,当我想编码从DataTable
到时,需求就来了JSON
。我一直在寻找一种将二进制字段编码为字符串并从字符串解码回的方法byte[]
。
因此,我创建了两个类-一个包装以上解决方案的类(当从字符串编码时就可以了,因为长度始终是偶数),另一个则处理byte[]
编码。
我通过添加一个字符来告诉我二进制数组的原始长度是奇数('1')还是偶数('0'),从而解决了长度不均的问题
如下:
public static class StringEncoder
{
static byte[] EncodeToBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
static string DecodeToString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
}
public static class BytesEncoder
{
public static string EncodeToString(byte[] bytes)
{
bool even = (bytes.Length % 2 == 0);
char[] chars = new char[1 + bytes.Length / sizeof(char) + (even ? 0 : 1)];
chars[0] = (even ? '0' : '1');
System.Buffer.BlockCopy(bytes, 0, chars, 2, bytes.Length);
return new string(chars);
}
public static byte[] DecodeToBytes(string str)
{
bool even = str[0] == '0';
byte[] bytes = new byte[(str.Length - 1) * sizeof(char) + (even ? 0 : -1)];
char[] chars = str.ToCharArray();
System.Buffer.BlockCopy(chars, 2, bytes, 0, bytes.Length);
return bytes;
}
}
searchResult.Properties["user"][0]
?尝试byte[]
先将其投放