public static bool CreateBSCommBufferFromString1(string asCmdParamText, out byte[] abytBuffer)
{
abytBuffer = new byte[4];
Array.Clear(abytBuffer, 0, 4);
try
{
if (asCmdParamText.Length == 0)
return true;
byte[] bytText = System.Text.Encoding.UTF8.GetBytes(asCmdParamText);
byte[] bytTextLen = BitConverter.GetBytes(Convert.ToUInt32(bytText.Length + 1));
abytBuffer = new byte[4 + bytText.Length + 1];
bytTextLen.CopyTo(abytBuffer, 0);
bytText.CopyTo(abytBuffer, 4);
abytBuffer[4 + bytText.Length] = 0;
return true;
}
catch
{
abytBuffer = new byte[4];
Array.Clear(abytBuffer, 0, 4);
return false;
}
}
这样转为二进制的方式和
byte[] bytText = System.Text.Encoding.UTF8.GetBytes(asCmdParamText);这个方法 有什么区别吗
CreateBSCommBufferFromString1 出来的byte[],带上了一些额为的信息。
var str="123";
CreateBSCommBufferFromString1(str,out arr)//output: [0,0,0,3,1,2,3,0]
0,0,0,3:bytTextlen,原始数据长度。
1,2,3:原始数据
0:最后一位的补0.
这个应该是在做类似自定义传输协议的封装,数据序列化/反序列都有一定格式
在解析的时候,先读取4byte,知道数据的长度,在读取len的真实数据,在然后读取一个0,作为2部分数据的分割符号。