字符串填充到指定长度

一、需求

在传输一个文件的时候,传输的是二进制数据,整个数据文件的结构为:
文件名称 + 文件本身
其中文件名称固定占30个byte,存在的情况就是,有的文件名比较长,有的文件名比较短,所有要补足30个字节。

数据构成 长度(byte) 示例1 示例2
30 bytes acb.txt wueoruwousjlasjljgljljgaj.docx
数据 N bytes byte[1980] byte[2049]

二、自己臆想的补足方式

文件名原本有8个字节长,我自己创一个12字节的数组 (new byte[12])补在后面。
还原成string的时候,我用Trim()剔除12字节的空白信息。

var strData = Encoding.UTF8.GetBytes("实验报告.doc");//8 bytes
var blankData = new byte[12];                        //生成一个12bytes的空数组,用来补足20字节
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()}]");                          //[实验报告.doc            ]

实践证明【var blankData = new byte[12]】,空白数组blankData 里面装的东西不是空白(space)。

三、正确的方式

  • 1、先把字符串用space扩充到30个字符
  • 2、string转成byte
  • 3、发送
  • 4、接收后转成string
  • 5、用Trim()去掉space
var cmdStr1 = "实验报告.doc";
var cmdPad = cmdStr1.PadRight(30);   //用space扩充到30个字符
var parseStr2 = Encoding.UTF8.GetBytes(cmdPad);
var parseStr3 = Encoding.UTF8.GetString(parseStr2.ToArray());

Debug.Log($"[{
      
      parseStr3.Length}]");  //30
Debug.Log($"[{
      
      parseStr3.Trim()}]");  //[实验报告.doc]

猜你喜欢

转载自blog.csdn.net/dzj2021/article/details/129531077