Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# - Fatal编程技术网

C#字节[,]到字符串数组

C#字节[,]到字符串数组,c#,C#,上下文 我在寻找一种简单的方法,将2D字节[,]数组转换为C#中的字符串数组 我找到了将byte[]转换为string的函数System.Text.Encoding.UTF8.GetString() 问题 但是如何处理2D字节[,]数组到字符串数组。字节[,]的长度每次都不同 字节[,]字节=新字节[,]{ {(字节)'H',(字节)'e',(字节)'l',(字节)'l',(字节)'o',(字节)!', {(字节)'W',(字节)'o',(字节)'r',(字节)'l',(字节)'d',(字

上下文

  • 我在寻找一种简单的方法,将2D字节[,]数组转换为C#中的字符串数组

  • 我找到了将byte[]转换为string的函数
    System.Text.Encoding.UTF8.GetString()

问题

  • 但是如何处理2D字节[,]数组到字符串数组。字节[,]的长度每次都不同
字节[,]字节=新字节[,]{
{(字节)'H',(字节)'e',(字节)'l',(字节)'l',(字节)'o',(字节)!',
{(字节)'W',(字节)'o',(字节)'r',(字节)'l',(字节)'d',(字节)0}
};
string[]strings=新字符串[bytes.GetLength(0)];
对于(var i=0;i
。但是,如果类型是
byte[][]
而不是
byte[,]
,那么对您来说,事情就简单多了。。。您能澄清一下为什么要使用
字节[,]



说明:
GetLength(int-dimension)
返回指定维度的长度-在本例中,
GetLength(0)
2
(对于两个字符串)和
GetLength(1)
6
(对于字符串长度为6)。我们分配一个足够大的字符串数组来容纳所有字符串。然后,对于每个字符串(在
for
循环中),我们首先获取属于该字符串的所有字节。这是使用Linq完成的:我们将
字节[,]
数组转换为一系列普通的
字节
s(使用
类型
),然后我们
跳过前面看到的所有字节,只
根据需要取
字节
。这些
byte
s然后填充到临时数组
stringBytes
,然后将其解码为字符串。

锯齿状数组更容易,因为您只需遍历包含数组的数组。对他们来说,你可以做如下事情:

var stringArray = byteArrays
               .Select(innerArray => Encoding.UTF8.GetString(innerArray))
               .ToList();
但既然不是这样,我们就需要想出一些不同的办法。多维数组更像excel电子表格,其中每个单元格包含一个字符

问题是每行的字节数完全相同,而字符串的大小可能更小。最标准的方法是用NULL(0)终止字符串

这是我的工作示例:

class Program
{
    static void Main(string[] args)
    {
        //different sizes for each row.
        byte[,] arrays = new byte[2,40];
        arrays[0,0] = (byte)'A';
        arrays[0, 1] = (byte)'B';
        arrays[0, 2] = (byte)'C';
        arrays[0, 3] = (byte)'D';
        arrays[1, 0] = (byte)'E';
        arrays[1, 1] = (byte)'F';
        arrays[1, 2] = (byte)'G';
        arrays[1, 3] = (byte)'H';
        arrays[1, 4] = (byte)'I';

        List<string> stringArray = new List<string>();
        List<byte> stringBytes = new List<byte>();
        for (int row = 0; row < arrays.GetLength(0); row += 1)
        {
            for (int col = 0; col < arrays.GetLength(1); col += 1)
            {
                //got a null terminator
                if (arrays[row, col] == 0)
                {
                    //check if it's for UTF8 encoding.
                    if (arrays.GetLength(1) == col+1 || arrays[row,col+1] == 0)
                    {
                        //nope. End of this string.
                        stringArray.Add(Encoding.UTF8.GetString(stringBytes.ToArray()));
                        stringBytes.Clear();
                        break;
                    }
                }

                // add all bytes for the current row.
                stringBytes.Add(arrays[row, col]);
            }
        }

        foreach (var item in stringArray)
        {
            //prints:
            // ABCD
            // EFGHI
            Console.WriteLine(item);
        }

    }
}
类程序
{
静态void Main(字符串[]参数)
{
//每行的尺寸不同。
字节[,]数组=新字节[2,40];
数组[0,0]=(字节)'A';
数组[0,1]=(字节)'B';
数组[0,2]=(字节)'C';
数组[0,3]=(字节)'D';
数组[1,0]=(字节)'E';
数组[1,1]=(字节)'F';
数组[1,2]=(字节)'G';
数组[1,3]=(字节)'H';
数组[1,4]=(字节)'I';
List stringArray=新列表();
List stringBytes=新列表();
for(int row=0;row
您将其转换为字符串的目的是什么?请给出一个示例您确定它不是
字节[][]
数组吗?
class Program
{
    static void Main(string[] args)
    {
        //different sizes for each row.
        byte[,] arrays = new byte[2,40];
        arrays[0,0] = (byte)'A';
        arrays[0, 1] = (byte)'B';
        arrays[0, 2] = (byte)'C';
        arrays[0, 3] = (byte)'D';
        arrays[1, 0] = (byte)'E';
        arrays[1, 1] = (byte)'F';
        arrays[1, 2] = (byte)'G';
        arrays[1, 3] = (byte)'H';
        arrays[1, 4] = (byte)'I';

        List<string> stringArray = new List<string>();
        List<byte> stringBytes = new List<byte>();
        for (int row = 0; row < arrays.GetLength(0); row += 1)
        {
            for (int col = 0; col < arrays.GetLength(1); col += 1)
            {
                //got a null terminator
                if (arrays[row, col] == 0)
                {
                    //check if it's for UTF8 encoding.
                    if (arrays.GetLength(1) == col+1 || arrays[row,col+1] == 0)
                    {
                        //nope. End of this string.
                        stringArray.Add(Encoding.UTF8.GetString(stringBytes.ToArray()));
                        stringBytes.Clear();
                        break;
                    }
                }

                // add all bytes for the current row.
                stringBytes.Add(arrays[row, col]);
            }
        }

        foreach (var item in stringArray)
        {
            //prints:
            // ABCD
            // EFGHI
            Console.WriteLine(item);
        }

    }
}