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