Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在字符串中存储字节值?将字节转换为字符串?_C#_.net_Winforms_Bytearray_Byte - Fatal编程技术网

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

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 >=

如果我从一个源中获取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;
    }
我在想我能做到这一点

 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或以上,则表示您正在获取无效字符)