将字节值存储在字符串中?将字节转换为字符串?

时间:2012-03-18 06:11:07

标签: c# .net winforms bytearray byte

如果我从一个源获得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 - 当转换回它的原始形式时。我可以告诉所有正确的值都在字符串中,因为有一个模式,它与我转换成位的原始字符串一致..对于我应该做什么的任何想法?

3 个答案:

答案 0 :(得分:2)

为什么不使用List<byte>?它会在您添加更多字节时动态增长。然后你可以把它解码成一个字符串。

答案 1 :(得分:1)

好吧,如果您确实需要/需要将它们放在一个字符串中(尽管它可能不是存储数据的最有效方法,如果您真的只是将它用作存储空间),您可以沿着这些行执行某些操作:

例如,这段代码将打印出字符'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;

答案 2 :(得分:0)

MemoryStream是另一种可能的容器,

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

您可以使用其WriteByte方法累积字节。