2

I wrote a function to convert byte[] to string, and I add ";" after each byte. Now I want to convert this string to byte[] by splitting the string (similar to a CSV string).

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;
}

How could I write a function to convert this string to that byte array again?

4

9 回答 9

7

尝试这个

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();
于 2010-11-30T12:03:39.320 回答
2

;我想你也想在转换时摆脱。我想你想做这样的事情:

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

如果原始字节数组实际上包含;有效数据,这将失败,但在这种情况下,无论如何您都会遇到很多问题,因为您的“CSV”文件将被错误地格式化。

于 2010-11-30T12:06:30.993 回答
1

StringBuilder将有用而不是String(性能方面)。

StringBuilder

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

String

byte[] buffer = System.Text.Encoding.UTF8.GetBytes(objString);
于 2010-11-30T12:02:34.920 回答
1

考虑使用拆分字符串

于 2010-11-30T12:00:10.450 回答
0
str.Split(new char[]{';'}, 
          StringSplitOptions.RemoveEmptyEntries).Select(s => byte.Parse(s)).ToArray();
于 2010-11-30T12:01:20.320 回答
0
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
return encoding.GetBytes(yourStringVariable);
于 2010-11-30T12:04:11.693 回答
0

我知道你现在已经知道答案了......但是这段代码解决了这个问题,我希望它可以帮助别人。

        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++;
        }
于 2011-03-02T20:02:13.490 回答
0

简单地 :)

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();
}
于 2012-03-09T00:43:14.520 回答
0
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;
                    }

我喜欢使用数字样式的十六进制数字。

于 2019-03-07T22:20:14.137 回答