字符串的二进制存储读取

问题描述:C++用CArchive类存储的文件,Unicode编码的,用C#的BinaryReader读取

现状:C#也设置为Unicode格式,C++的Int用C#的ReadInt32,C++的double用C#的ReadDouble正常读取,但是字符串碰到了问题。

分析:

1. C++中的CString存储的时候,存储为FFFEFF 然后后面是字符串的长度【Unicode一个字符占2个字节,这个长度是字符的长度】

(1)如果小于256,则为单个字节存储 FFFEFF DF 长度为DF

(2)如果大于=256,则3个字节存储 FFFEFF FF0602 长度为 256乘以02+06

2. C#中的string用ReadString读取的时候,字符串的长度是字节的长度,导致只读取了一半。所以没法直接拿来用。不知道我这个理解是不是正确呢。

(1)C#的存储如果是小于256个字节的时候,DF就是一个字节存长度

(2)如果大于=256个字节,就是,第一个位是1,E803 代表后一个字节也存储长度  长度为E8-128+128*03

解决方法:

     1.C#读取

            inReader.ReadBytes(3);
            bb1 = inReader.ReadBytes(1);

            int count = 取长度;

            s1 = System.Text.Encoding.Unicode.GetString(inReader.ReadBytes(count * 2));

       2.C#存储

          byte[] abc = new byte[]{255, 254, 255};

            inWrite.Write(abc);
            inWrite.Write((byte)s1.Length);   //如果大于128个字符,需要处理哦
            inWrite.Write(System.Text.Encoding.Unicode.GetBytes(s1));

总结:研究研究而已,没有很深入。等待验证。

      JAVA中的ReadUTF跟WriteUTF,对于字符串的长度是固定占2个字节。例如0004,0234这种



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值