Преобразование строки в байтовый массив в C # (CSV) - PullRequest
2 голосов
/ 30 ноября 2010

Я написал функцию для преобразования byte[] в string, и я добавил ";"после каждого байта.Теперь я хочу преобразовать это string в byte[], разделив строку (аналогично строке CSV).

public string ByteArrayToString(byte[] byteArray,string s)
{       
    for (int i = 0; i < byteArray.Length; i++)
    {
        s += byteArray[i].ToString() + ";";
    }
    s = s.Substring(0, s.Length - 1);
    return s;
}

Как я могу написать функцию для преобразования этой строки в этот байтовый массив снова?

Ответы [ 9 ]

7 голосов
/ 30 ноября 2010

попробуйте

var byteArray = new byte[] {123, 11, 111};
var stringBytes = string.Join(";", byteArray.Select(b => b.ToString()));
var newByteArray = stringBytes.Split(';').Select(s => byte.Parse(s)).ToArray();
1 голос
/ 30 ноября 2010

Полагаю, вы хотите избавиться от ; и при конвертации. Я думаю, что вы хотите сделать что-то вроде этого:

byte[] result = Encoding.UTF8.GetBytes(s.Replace(";",""));

Это не удастся, если исходный байтовый массив на самом деле содержит ;, который является действительными данными, но в этом случае у вас все равно будет много проблем, так как ваш файл "CSV" будет неправильно отформатирован.

1 голос
/ 30 ноября 2010

String Builder будет полезен вместо строки (производительность) -

с String Builder вы можете,

  • byte [] buffer = System.Text.Encoding.UTF8.GetBytes (objStringBuilder.ToString ());

со строкой,

  • byte [] buffer = System.Text.Encoding.UTF8.GetBytes (objString);
1 голос
/ 30 ноября 2010

Рассмотрите возможность использования Split String

0 голосов
/ 08 марта 2019
string[] sbytes   = sl.Split(',');
                    byte[] b          = new byte[sbytes.Length];
                    for (int j = 0; j < sbytes.Length; j++)
                    {
                        byte newByte  = byte.Parse(sbytes[j], System.Globalization.NumberStyles.HexNumber);
                        b[j]          = newByte;
                    }

Мне нравится использовать числовые стили шестнадцатеричное число.

0 голосов
/ 09 марта 2012

Просто :)

public static byte[] Bytes ( this string Key )
{
    return Enumerable.Range(0, Key.Binary().Length / 8 )
                     .Select(Index => Convert.ToByte(
                         Key.Binary().Substring(Index * 8, 8), 2))
                     .ToArray();
}
0 голосов
/ 02 марта 2011

Я знаю, что вы уже знаете ответ ... но этот код решает проблему, я надеюсь, что он поможет кому-то еще.

        int counter= 0;
        string cadena = "8,5,6,3,4,6,3"
        string[] foto = cadena.Split(',');
        byte[] fotoFinal = new byte[foto.Length];
        foreach (string s in foto)
        {
            fotoFinal[contador] = Convert.ToByte(s);
            counter++;
        }
0 голосов
/ 30 ноября 2010
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
return encoding.GetBytes(yourStringVariable);
0 голосов
/ 30 ноября 2010
str.Split(new char[]{';'}, 
          StringSplitOptions.RemoveEmptyEntries).Select(s => byte.Parse(s)).ToArray();
...