首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向的BitConverter.ToString()?

反向的BitConverter.ToString()?
EN

Stack Overflow用户
提问于 2009-08-04 22:54:44
回答 7查看 50.4K关注 0票数 32

我有一个字节数组,我希望将其存储为字符串。我可以这样做:

代码语言:javascript
复制
byte[] array = new byte[] { 0x01, 0x02, 0x03, 0x04 };
string s = System.BitConverter.ToString(array);

// Result: s = "01-02-03-04"

到目前一切尚好。有人知道我是怎么把它返回到数组的吗?不存在接受字符串的BitConverter.GetBytes()重载,将字符串拆分成字符串数组,然后对每个字符串数组进行转换似乎是一种令人讨厌的解决办法。

所讨论的数组可能是可变长度的,可能约为20个字节。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-08-04 23:00:44

不是一个内置的方法,而是一个实现。(不过,没有拆分也可以做到)。

代码语言:javascript
复制
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);

没有拆分的方法:(对字符串格式做了很多假设)

代码语言:javascript
复制
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);

和另一个方法,没有拆分或子字符串。但是,如果您将此提交给源代码控制,则可能会受到攻击。我对这样的健康问题不承担任何责任。

代码语言:javascript
复制
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);
}

(基本实现两个字符的base16转换)

票数 27
EN

Stack Overflow用户

发布于 2009-08-04 23:09:46

您可以自己解析该字符串:

代码语言:javascript
复制
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])
   );
}

不过,我认为最好的解决方案是使用扩展:

代码语言:javascript
复制
byte[] data = s.Split('-').Select(b => Convert.ToByte(b, 16)).ToArray();
票数 29
EN

Stack Overflow用户

发布于 2009-08-04 23:32:17

如果您不需要该特定格式,请尝试使用Base64,如下所示:

代码语言:javascript
复制
var bytes = new byte[] { 0x12, 0x34, 0x56 };
var base64 = Convert.ToBase64String(bytes);
bytes = Convert.FromBase64String(base64);

Base64也将大大缩短。

如果您需要使用这种格式,这显然不会有帮助。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1230303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档