網(wǎng)站建設(shè)公司 廣告法被處罰營銷客戶管理系統(tǒng)
一、需求
在傳輸一個(gè)文件的時(shí)候,傳輸?shù)氖嵌M(jìn)制數(shù)據(jù),整個(gè)數(shù)據(jù)文件的結(jié)構(gòu)為:
文件名稱 + 文件本身
其中文件名稱固定占30個(gè)byte,存在的情況就是,有的文件名比較長,有的文件名比較短,所有要補(bǔ)足30個(gè)字節(jié)。
數(shù)據(jù)構(gòu)成 | 長度(byte) | 示例1 | 示例2 |
---|---|---|---|
頭 | 30 bytes | acb.txt | wueoruwousjlasjljgljljgaj.docx |
數(shù)據(jù) | N bytes | byte[1980] | byte[2049] |
二、自己臆想的補(bǔ)足方式
文件名原本有8個(gè)字節(jié)長,我自己創(chuàng)一個(gè)12字節(jié)的數(shù)組 (new byte[12])補(bǔ)在后面。
還原成string的時(shí)候,我用Trim()剔除12字節(jié)的空白信息。
var strData = Encoding.UTF8.GetBytes("實(shí)驗(yàn)報(bào)告.doc");//8 bytes
var blankData = new byte[12]; //生成一個(gè)12bytes的空數(shù)組,用來補(bǔ)足20字節(jié)
var allData = new List<byte>();
allData.AddRange(strData); //合并
allData.AddRange(blankData); //合并var parseStr = Encoding.UTF8.GetString(allData.ToArray()); //還原成string
Debug.Log($"[{parseStr.Length}]"); //20
Debug.Log($"[{parseStr.Trim().Length}]"); //20
Debug.Log($"[{parseStr.Trim()}]"); //[實(shí)驗(yàn)報(bào)告.doc ]
實(shí)踐證明【var blankData = new byte[12]】,空白數(shù)組blankData 里面裝的東西不是空白(space)。
三、正確的方式
- 1、先把字符串用space擴(kuò)充到30個(gè)字符
- 2、string轉(zhuǎn)成byte
- 3、發(fā)送
- 4、接收后轉(zhuǎn)成string
- 5、用Trim()去掉space
var cmdStr1 = "實(shí)驗(yàn)報(bào)告.doc";
var cmdPad = cmdStr1.PadRight(30); //用space擴(kuò)充到30個(gè)字符
var parseStr2 = Encoding.UTF8.GetBytes(cmdPad);
var parseStr3 = Encoding.UTF8.GetString(parseStr2.ToArray());Debug.Log($"[{parseStr3.Length}]"); //30
Debug.Log($"[{parseStr3.Trim()}]"); //[實(shí)驗(yàn)報(bào)告.doc]