C# 在字符串中存储字节值?将字节转换为字符串?
如果我从一个源中获取8位,然后将这8位放入一个字节,那么我如何存储这个字节?每个字节都是消息的一部分(它曾经是一个字符串),我不知道最终会有多少字节——因此使用字节数组并不是一个真正的选项。我可以把它存储在一个字符串中吗?我希望能够在获得所有字节后重新组装字符串,我将如何做到这一点 使用以下方法将8位转换为一个字节C# 在字符串中存储字节值?将字节转换为字符串?,c#,.net,winforms,bytearray,byte,C#,.net,Winforms,Bytearray,Byte,如果我从一个源中获取8位,然后将这8位放入一个字节,那么我如何存储这个字节?每个字节都是消息的一部分(它曾经是一个字符串),我不知道最终会有多少字节——因此使用字节数组并不是一个真正的选项。我可以把它存储在一个字符串中吗?我希望能够在获得所有字节后重新组装字符串,我将如何做到这一点 使用以下方法将8位转换为一个字节 public byte GetByte(BitArray array){ Byte byt = 0; for (int i = 7; i >=
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;
}
我在想我能做到这一点
bytesOfTheMessage += (valueInByte.ToString() + "+"); //bytesOfTheMessage is a string
但是。。。我在一个字符串中有一堆字节值。。。我需要提取和转换,但是我要转换成什么呢。我得到的第一个值是“138”,它应该是数字2——当转换回原始形式时。我可以看出所有正确的值都在字符串中,因为有一个模式,它与我转换为位的原始字符串一致。。你知道我该怎么做吗?为什么不使用
列表?当您添加更多字节时,它将动态增长。然后你可以把它解码成一个字符串。为什么不使用列表呢?当您添加更多字节时,它将动态增长。然后,您可以将其解码为字符串。如果您确实想/需要将其放入字符串中(尽管这可能不是存储数据的最有效方式,如果您真的只是将其用作存储),您可以按照以下思路做些事情:
例如,此位代码将打印出字符“a”(谁的ASCII代码是97,十进制。请注意,高于127的任何值都显示为“?”)
准备编译的示例程序如下所示:
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;
好的,如果您确实想/需要将它们放在字符串中(尽管这可能不是存储数据的最有效方式,如果您真的只是将其用作存储),您可以按照以下思路进行操作:
例如,此位代码将打印出字符“a”(谁的ASCII代码是97,十进制。请注意,高于127的任何值都显示为“?”)
准备编译的示例程序如下所示:
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;
MemoryStream
是另一个可能的容器
您可以使用其WriteByte
方法来累积字节。MemoryStream
是另一种可能的容器
您可以使用它的WriteByte
方法来累加字节。字节数组怎么样?还是列表?@MitchWheat问题是我不知道我将返回的字节数(总共)。。而且你不能当场扩展一个字节数组。。你必须不断地制作一个新的……这和添加到字符串(它们是不可变的)没有什么不同。是的,这也是我不想使用它的另一个原因。你考虑过作为框架一部分的类吗?字节数组怎么样?还是列表?@MitchWheat问题是我不知道我将返回的字节数(总共)。。而且你不能当场扩展一个字节数组。。你必须不断地创建一个新的……这和添加到字符串(它们是不可变的)没有什么不同是的,这也是我不想使用它的另一个原因。你考虑过作为框架一部分的类吗?嗯。。。我得到了“138”的值。。。但是原始字符串中的值是2.我一定是做错了什么。。从我得到的字节模式,我可以判断它是正确的数据。。。但是我不知道138是怎样的2…?用十六进制编辑器检查原始文件。可能是您正在以偏移量获取字节。此外,请确保您正在查看的“2”字符是用ascii编码的,这是一种8位字符编码(实际上是7位,因为符号位未使用,并呈现为“?”—如果您获得的值为128或以上,则表示您正在获取无效字符)嗯。。。我得到了“138”的值。。。但是原始字符串中的值是2.我一定是做错了什么。。从我得到的字节模式,我可以判断它是正确的数据。。。但是我不知道138是怎样的2…?用十六进制编辑器检查原始文件。可能是您正在以偏移量获取字节。此外,请确保您正在查看的“2”字符是用ascii编码的,这是一种8位字符编码(实际上是7位,因为符号位未使用,并以“?”形式呈现-如果您获得的值为128或以上,则表示您正在获取无效字符)