首页 新闻 会员 周边

怎样把字节数组byte[]反序列化成字符串数组

0
悬赏园豆:10 [待解决问题]

  subCloudService.BeginGetRecommendProduct("12345", 1, lDelegate =>
            {
               
                  byte[] lResult = subCloudService.EndGetRecommendProduct(lDelegate).ToArray();
                  Dispatcher.BeginInvoke(new ProcessSumResultCb(ProcessSumResult), new object[] { lResult });
            }, null);

byte[]中包含了从服务器返回的数据,怎样把它反序列化字符串数组?

菜鸟_001的主页 菜鸟_001 | 初学一级 | 园豆:70
提问于:2013-09-03 15:32
< >
分享
所有回答(2)
0

你得告诉我你的 lResult 到底是啥格式的。

Launcher | 园豆:45045 (高人七级) | 2013-09-03 15:35

byte[0] 68

byte[1] 66

byte[2] 60

byte[3] 58

...

每一个byte元素表示一条记录,一个数据表格中的一条记录

最终返回一个十进制的数组,如68 66 60 58

支持(0) 反对(0) 菜鸟_001 | 园豆:70 (初学一级) | 2013-09-03 16:49

@菜鸟_001: 我编写了一段简单的代码,不是解决你的问题,而是让你明白什么叫数据的格式,不然你是无法解析的。

        static void Main(string[] args)
        {
            string headers = "Col1,Col2,Col3";

            string[] rows = new string[]
            {
                "Value11,Value12,Value13",
                "Value21,Value22,Value23",
                "Value31,Value32,Value33"
            };

            byte[] buffer = null;

            MemoryStream ms = new MemoryStream();
            using (StreamWriter sw = new StreamWriter(ms, Encoding.UTF8))  // 使用了 utf-8 编码
            {
                // 写入表格列名
                sw.WriteLine(headers);

                // 写入 rows 中的三条记录。
                Array.ForEach(rows, o =>
                    {
                        sw.WriteLine(o);
                    });

                sw.Flush();

                ms.Seek(0, SeekOrigin.Begin);
                buffer = ms.ToArray();
            }

            // 下面是如何从 buffer 按照我们写入的格式来读取。
            string hearders2;
            string[] rows2;

            ms = new MemoryStream(buffer);
            using (StreamReader sr = new StreamReader(ms, Encoding.UTF8)) // 使用同写入时相同的 utf-8 编码
            {
                // 先读取表格列名。                
                hearders2 = sr.ReadLine();

                // 读入记录。 
                List<string> list = new List<string>();
                while (true)
                {
                    string row = sr.ReadLine();
                    if (row == null)
                        break;

                    list.Add(row);
                }

                rows2 = list.ToArray();
            }

            Console.Read();
        }
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-09-03 17:25
0

可以用LINQ实现,代码如下:

var byteArray = new byte[4] { 68, 66, 60, 58 };
var stringArray = byteArray.Select(b => b.ToString()).ToArray();
Console.WriteLine(string.Join(",",stringArray));
dudu | 园豆:31005 (高人七级) | 2013-09-03 18:14

-感谢帮助我的人,谢谢你们!

这是表中的数据

  1 澳凯8天湛蓝之旅 s1.jpg ◆蓝山公园 —世界自然遗产之一,当您步入风景如画的原始森林公园,整个空气中散发着的著尤加利树的清香, 会给您一种返朴归真的世外桃源般的感受。 ◆凯 恩 斯 --大堡礁近岸最大、最不受人工破坏、和最 17865 3   2 巴厘岛4晚6日品质游(直飞) s2.jpg ◆超值住宿—巴厘岛入住国际5*酒店pullman 或同级。 ◆特色美食—金巴兰BBQ,黑胡椒螃蟹餐,皇家风味餐等。 ◆探秘巴厘岛—乌鲁瓦度望夫崖+海神庙+梯田下午茶+蜜月湾+玻璃底船+阿勇河漂流。 ◆升级赠送—巴厘岛赠送每人一碗燕窝、每人一顶遮阳帽、每天一杯矿泉水。 6000             

  byte[] lResult = subCloudService.EndGetRecommendProduct(lDelegate).ToArray();

这是正常返回的结果,

 lResult {byte[9820]} byte[]   [0] 68 byte   [1] 65 byte   [2] 66 byte   [3] 73 byte   [4] 78 byte   [5] 50 byte   [6] 48 byte   [7] 48 byte   [8] 67 byte   [9] 38 byte   [10] 0 byte   [11] 0 byte   [12] 255 byte   [13] 166 byte   [14] 17 byte   [15] 0 byte   [16] 0 byte   [17] 6 byte   [18] 0 byte   [19] 0 byte   [20] 0 byte   [21] 34 byte   [22] 0 byte   [23] 0 byte   [24] 0 byte   [25] 9 byte   [26] 0 byte   [27] 0 byte   [28] 0 byte   [29] 65 byte   [30] 108 byte   [31] 105 byte   [32] 103 byte   [33] 110 byte   [34] 109 byte   [35] 101 byte   [36] 110 byte   [37] 116 byte   [38] 13 byte   [39] 0 byte   [40] 0 byte   [41] 0 byte   [42] 116 byte   [43] 97 byte   [44] 76 byte   [45] 101 byte   [46] 102 byte   [47] 116 byte   [48] 74 byte   [49] 117 byte   [50] 115 byte   [51] 116 byte   [52] 105 byte   [53] 102 byte   [54] 121 byte   [55] 8 byte   [56] 0 byte   [57] 0 byte   [58] 0 byte   [59] 66 byte   [60] 108 byte   [61] 111 byte   [62] 98 byte   [63] 84 byte   [64] 121 byte   [65] 112 byte   [66] 101 byte   [67] 11 byte   [68] 0 byte   [69] 0 byte   [70] 0 byte   [71] 100 byte   [72] 97 byte   [73] 98 byte   [74] 116 byte   [75] 85 byte   [76] 110 byte   [77] 107 byte   [78] 110 byte   [79] 111 byte   [80] 119 byte   [81] 110 byte   [82] 15 byte   [83] 0 byte   [84] 0 byte   [85] 0 byte   [86] 66 byte   [87] 117 byte   [88] 115 byte   [89] 105 byte   [90] 110 byte   [91] 101 byte   [92] 115 byte   [93] 115 byte   [94] 67 byte   [95] 108 byte   [96] 97 byte   [97] 115 byte   [98] 115 byte   [99] 73 byte   [100] 68 byte

...

   

 

使用你的方法用linq实现

string.Join(",",stringArray)的值为

"68,65,66,73,78,50,48,48,67,38,0,0,255,166,17,0,0,6,0,0,0,34,0,0,0,9,0,0,0,65,108,105,103,110,109,101,110,116,13,0,0,0,116,97,76,101,102,116,74,117,115,116,105,102,121,8,0,0,0,66,108,111,98,84,121,112,101,11,0,0,0,100,97,98,116,85,110,107,110,111,119,110,15,0,0,0,66,117,115,105,110,101,115,115,67,108,97,115,115,73,68,0,0,0,0,10,0,0,0,67,97,108,99,117,108,97,116,101,100,5,0,0,0,70,97,108,115,101,16,0,0,0,67,117,115,116,111,109,65,116,116,114,105,98,117,116,101,115,0,0,0,0,8,0,0,0,68,97,116,97,84,121,112,101,11,0,0,0,100,97,116,67,97,114,100,105,110,97,108,16,0,0,0,68,101,99,105,109,97,108,80,114,101,99,105,115,105,111,110,1,0,0,0,48,12,0,0,0,68,101,99,105,109,97,108,83,99,97,108,101,1,0,0,0,48,12,0,0,0,68,101,102,97,117,108,116,86,97,108,117,101,0,0,0,0,11,0,0,0,68,101,115,99,114,105,112,116,105,111,110,0,0,0,0,15,0,0,0,68,105,99,116,105,111,110,97,114,121,69,110,116,114,121,0,0,0,0,13,0,0,0,68,105,115,112,108,97,121,70,111,114,109,97,116,0,0,0,0,12,0,0,0,68,105,115,112,108,97,121,76,97,98,101,108,2,0,0,0,73 ...

怎样把它转化为原来表中的数据

支持(0) 反对(0) 菜鸟_001 | 园豆:70 (初学一级) | 2013-09-04 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册