binary-compatible - 求一本好理解且详细的C++二进制兼容性知识的书或文章
ringa_lee
ringa_lee 2017-04-17 11:42:15
[C++讨论组]

Hello,
如题,本人对这个问题一直比较困惑,遇到有些情况不知道如何下手。我感觉自己只知皮毛,不知根本,还请各位高手求教!

多谢!

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
高洛峰
  • 深度探索 C++ 对象模型
  • 程序员的自我修养:链接、装载与库
迷茫

二进制兼容,主要是针对数据的处理,不仅仅是能处理字符串,
还能处理带绝对0('\0')的数据;
传输字符串,我们只需要知道一个内容的开头指针就可以传输,因为字符串以'\0'结尾,
读到这个符号,就清楚所需的数据都读完了;
而传输二进制数据,二进制数据内容中可能会有绝对0,所以在传输的过程中,
除了内容的开头指针,还是传输一个长度,这样后续的接口函数,才知道这部分数据是多少;

比如STL的string,一般是用来存储字符串的;
如果在某些接口,需要使用C类型的char*,我们通常使用方法:c_str()

std::string str;
char * a = str.c_str();

而STL的string类型也是二进制安全的,就是说,这个类是可以用来存放二进制数据的;
而c_str()方法是简单的返回一个字符数据的开头指针;
如果再用c_str()这样的方法,就可能导致数据丢失(遇到0结束)
这时候,可以使用.data(),和length()转换;(提供一个开头指针和一个数据长度)

std::string binaryData;
char * binData = new char[binaryData.length()];
memcpy(&stData,binaryData.data(),binaryData.length());

通过这样转换传输,就是二进制安全的;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号