首页 新闻 搜索 专区 学院

c#转为二进制的不同

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

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);这个方法 有什么区别吗

凤城沙子的主页 凤城沙子 | 初学一级 | 园豆:115
提问于:2019-05-13 13:42
< >
分享
所有回答(1)
0

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部分数据的分割符号。

czd890 | 园豆:11893 (专家六级) | 2019-05-13 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册