开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5356|回复: 23
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 白菜C++仿易语言字节集 - 让C++变得更易些

[复制链接]
跳转到指定楼层
楼主
发表于 2022-5-29 12:09:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式   海南省海口市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 不知道 于 2022-5-29 12:24 编辑

[前言]
引用某位机构老师的话:C++的本质就是编译器代替C写了许多无聊的代码...
所以我在使用C++的经历中大多还是在使用C风格去编写代码,以及在易语言里让我看到了属于它风格的代码,于是乎借用C++的部分特性实现了C++版的“字节集”
让C/C++的字节集统一起来,并实现了"字节集、文本型、整数型"三大基础类型的互转、Unicode(UCS2)、UTF-8、ANSI常见字符集编码互转,让这些的操作变得更加得心应手!

(发出来只为了给易语言使用人群顺利过渡到C/C++做一个参考,可能如果我发错版块了,还恳请版主移动帖子到合适版块)


[声明参考]




[四类调试演示]




[综合演示示例]
[C++] 纯文本查看 复制代码
void 综合调试输出()
{
        //简单文本与整数拼接弹对话框(字节集默认重载了char*的buf返回)
        MessageBoxA(0,到字节集("白菜")+到文本(666),到字节集("随便写")+"标题",0);

        //测试输出可视字节集
        char w_txt[] = {62,84,49,114}; //Unicode字符串
        字节集 tit = 到字节集("数字游戏").扩容(到字节集(123,true).扩容("666")); //最佳扩容拼接
        printf(字节集(w_txt).到可视文本(true)); //参数true表示自动添加结尾换行符
        printf("%s\n",tit.到可视文本().buf); //注意printf投入可变参数时必须投入其buf指针
        printf("%s",jzjj(w_txt).buf); //zjj是十进制版与易语言输出一致(默认结尾无换行符)

        //弹出Unicode对话框(头文件里还有其他编码转换,这里就不多演示了)
        MessageBoxW(0,(字节集(w_txt)+L"小白菜").w(),ANSI到Unicode(tit).w(),0);
}




[最后给出工程源码]
白菜C 字节集1.0.zip (632.18 KB, 下载次数: 114)

PS:如有BUG可加Q群668536886向我反馈


评分

参与人数 5好评 +4 精币 +10 收起 理由
yangyitzzg + 2 支持开源~!感谢分享
易语言资源网 + 1 + 3 开源精神必须支持~
默念、 + 1 + 1 感谢分享,很给力!~
廿六 + 1 + 2 很好很强悍,坚持下去哦~
冰点 + 1 + 2 感谢分享,很给力!~

查看全部评分


沙发
 楼主| 发表于 2022-5-29 12:14:48 | 只看该作者   海南省海口市
本帖最后由 不知道 于 2022-5-29 12:31 编辑

补充说明:我的字节集只搞了基础的构造、拼接、显示输出、类型转换、编码转换的封装,对于字节集/字符串的各种复杂操作可以自行补充或通过继承字节集来进一步封装

关于从字节列表构造:
//字节集({1})、字节集({1,2})会有结构体赋值的二义性,会被C/C++编译器理解成对成员的赋值
        //如果一定要从{1,2,3}直接字面量构造需要引入initializer_list<unsigned char> list
         //但我嫌弃新版C++特性会造成编译过慢,再加上搞WDK编译的VC6年代msvcrp库不支持它

关于vector与字节集的关系我把字节集视为是基础类型,并不是复杂类型的列表容器,vector<T>则是利用C++模板技术生成的任意T类型的数组容器
本来我自己也写过一个vector,但后来发现自己封装的还没C++标准库搞的好(复杂的模板嵌套模板的结构的没编译过去、内存复制上好像也有BUG),所以字节集的数组还是得用std::vector<字节集>,甚至是其他通用型的数组都统一用std::vector就好


回复 支持 反对

使用道具 举报

结帖率:93% (13/14)

签到天数: 5 天

板凳
发表于 2022-5-29 14:18:24 | 只看该作者   重庆市重庆市
回复 支持 反对

使用道具 举报

地板
发表于 2022-5-29 15:19:26 | 只看该作者   北京市北京市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 5 天

地下
发表于 2022-5-29 15:27:38 | 只看该作者   新疆维吾尔自治区昌吉回族自治州
谢谢分享!
回复 支持 反对

使用道具 举报

签到天数: 1 天

6
发表于 2022-5-29 17:11:17 | 只看该作者   河北省保定市
typedef std::basic_string<uint8_t> bytes;
功能基本上都有
回复 支持 反对

使用道具 举报

7
 楼主| 发表于 2022-5-29 18:02:42 高大上手机用户 | 只看该作者   海南省海口市
本帖最后由 不知道 于 2022-5-29 18:05 编辑
1565030103 发表于 2022-5-29 17:11
typedef std::basic_string bytes;
功能基本上都有

或许吧,我确实没有学这个
一来我挺排斥标准库中各种乱七八糟的类型
二来我还是希望把握住一个东西的本质,字节集这个结构体有我对二进制跟字符串比较深刻的理解
三呢还是那句话凭什么要用自己的,demo里我也会一步步地去引导使用者知道为什么这样用,更智能更方便的糖果背后都有它的原因,知道了这些后吃起来才会香,
四,嘿嘿汉化大家都懂的
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 4 天

8
发表于 2022-5-29 18:39:03 | 只看该作者   广东省深圳市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

9
发表于 2022-5-29 19:10:38 | 只看该作者   福建省泉州市
支持一下
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 6 天

10
发表于 2022-5-29 19:33:57 | 只看该作者   山东省烟台市
不知道 发表于 2022-5-29 12:14
补充说明:我的字节集只搞了基础的构造、拼接、显示输出、类型转换、编码转换的封装,对于字节集/字符串的 ...

很多地方需要用缓冲区指针,我认为byte*比vector<byte>好太多了,vector有时候自己就释放了,反正都定义类了,长度直接单独存在成员里就好了。当然你也能用&vecotor<byte>[0]快捷取,但是还要判断是不是空。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表