【问题标题】:store byte values in a string? convert byte to string?将字节值存储在字符串中?将字节转换为字符串?
【发布时间】:2012-03-18 06:11:06
【问题描述】:

如果我从一个源获得 8 位并将这 8 位放入一个字节中,那么我该如何存储这个字节?每个字节都是消息的一部分(曾经是一个字符串)我不知道我最终会得到多少字节 - 因此使用字节数组并不是一个真正的选择。我可以将它存储在一个字符串中吗?我希望在获得所有字节后能够重新组装字符串,我该怎么做?

使用下面的方法将8位变成一个字节..

 public byte GetByte(BitArray array){
        Byte byt = 0;
        for (int i = 7; i >= 0; i--){
            byt = (byte)((byt << 1) | (array[i] ? 1 : 0));
        }
        return byt;
    }

我可以通过这样做来调用它...

 byte valueInByte = GetByte(bitsOfMessage);

我在想我可以做到这一点......

 bytesOfTheMessage += (valueInByte.ToString() + "+");  //bytesOfTheMessage is a string

但是...我在一个字符串中有一堆字节值...我需要提取和转换,但是我要转换成什么。我得到的第一个值是“138”,它应该是数字 2 - 当转换回它的原始形式时。我可以说字符串中存在所有正确的值,因为存在模式并且它与我转换为位的原始字符串一致..知道我应该做什么吗?

【问题讨论】:

  • 字节数组怎么样?或列表?
  • @MitchWheat 问题是我不知道我将返回的字节数(总共)..你不能当场扩展一个字节数组..你'我必须继续制作一个新的......
  • ...这与添加到字符串没有什么不同(它们是不可变的)
  • 是的,这也是我不想使用它的另一个原因。
  • 您考虑过作为框架一部分的BitConvertor 类吗?

标签: c# .net winforms bytearray byte


【解决方案1】:

你为什么不使用 List&lt;byte&gt; ?随着您添加更多字节,它将动态增长。然后就可以解码成字符串了。

【讨论】:

    【解决方案2】:

    好吧,如果您确实想要/需要将它们放在一个字符串中(尽管它可能不是存储数据的最有效方式,如果您真的只是将它用作存储),您可以按照这些方式做一些事情:

    例如这段代码会打印出字符'a'(谁的ASCII码是十进制的97。注意任何大于127的值都显示为'?')

            char[] ac = { (char)(byte)97 };
            string s = new String(ac);
            Console.WriteLine(s);
    

    一个可以编译的示例程序如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace ByteTest
    {
    class Program
    {
        static void Main(string[] args)
        {
            char[] ac = { (char)(byte)97 }; //converts it to a character
            string s = new String(ac); //converts it to a string
            Console.WriteLine(s); //writes 'a'
            Thread.Sleep(10000); //displays the 'a' for 10 seconds, then finishes executing
        }
    }
    }
    

    根据你的具体情况,你可以修改如下

     string Message = "";
     ...
     char[] ac = { (char)valueInByte };
     string s = new String(as);
     Message += s;
    

    【讨论】:

    • hmm...我得到了值“138”...虽然原始字符串中的值是2..我一定做错了..从字节的模式我回来了,我可以说这是正确的数据...但是..我不知道 138 是 2...?
    • 用十六进制编辑器检查原始文件。可能是您在偏移处抓取字节。此外,请确保您正在查看的“2”字符以 ascii 编码,这是一种 8 位字符编码(实际上是 7 位,因为符号位未使用并呈现为“?” - 如果您得到值128 及以上无符号/负符号,这意味着您正在抓取无效字符)
    【解决方案3】:

    MemoryStream 是另一个可能的容器,

    http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx

    您可以使用它的WriteByte 方法来累积字节数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2019-10-10
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多