开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 495|回复: 12
收起左侧

[易语言纯源码] 白菜跨语言数据类型打包与解包标准

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式   美国
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 不知道 于 2025-12-29 14:08 编辑

白菜跨语言数据类型封包与解包标准

简介

~AI的崛起,或许需要的是万物互联吧;

目前提供了易语言和PHP实现作为参考示例(它是一个设计标准,不局限于语言本身),旨在提供一套简单高效、跨语言的数据封包(FB)与解包(deFB)方案,便于在对数据进行统一的二进制参数级交互(封包中无需存档额外元信息)

  • 支持基本数据类型(singned/unsigned char/short/int/int64,bool,float/double)
  • 支持字符串,字节集(String,Bytes)
  • 支持数组(包含以上基本类型,及其下面结构体数组)
  • 支持结构体(对象序列化/反序列化,嵌套结构体/结构体数组)

设计标准参考

https://wiki.xbcsoft.com/BC-FB-Standard

代码仓库

https://github.com/xbcsoft/BC-FB-Standard


快速示例(PHP)

<?php
include 'FB.php';

// 准备数据
$a = 123;           //int
$b = 'hello';       //string

// 生成打包(FB 将把字段编码为二进制格式)
$fb = FB(i16($a), $b);
// 输出打包的可读形式(解字节集十进制视图)
echo "FB bytes: " . jzjj($fb) . "\n";

// 解包示例(将打包数据还原到所有变量,需提前给定反射类型—脚本语言这里可用特定初值表示)
$out_a = T_short;
$out_b = T_String;
deFB($fb, $out_a, $out_b);

echo "解包结果:a={$out_a}, b={$out_b}\n";

// 解包示例(对按索引读取)
$first = gFB($fb, 0);                        //取第一个参数(按字节集)
echo "参数1(原始):" .jzjj($first). "\n";
$first_int = gFBi($fb, 0);                   //取第一个参数(按整数)
echo "参数1(整型):" .$first_int. "\n";
$second = gFB($fb, 1);                       //取第二个参数
echo "参数2:" .$second. "\n";
解包结果:a=123, b=hello
参数1(原始):Bytes:2{123,0}
参数1(整型):123
参数2:hello

数组、结构体更多示例请参考:

https://wiki.xbcsoft.com/BC-FB-Standard/?file=3.0_打包数据类型的存储结构.html

https://wiki.xbcsoft.com/BC-FB-Standard/?file=4.0_结构体对象的打包方案.html



快速示例(易语言)
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
TEST_基本数据类型 ()
' TEST_基本类型含数组 ()
子程序名返回值类型公开备 注
TEST_基本数据类型  
变量名类 型静态数组备 注
char字节型 
bool逻辑型尽管易语言内部是4字节,封包后统一约定1字节
short短整数型 
int整数型 
int64长整数型 
float小数型 
double双精度小数型 
string文本型 
bytes字节集 
fb字节集 
连续赋值 (1, char, short, int, float, double)
bool = 真
int64 = 274877906943
bytes = 到字节集 (“world”)
fb = FB (char, short, int, int64, float, double, “hello”, bytes, bool)  ' 可直接投入字面量(但注意字节集不能直接投)
调试输出 (fb)
调试输出 (gFBi (fb, 0), gFBi (fb, 1), gFBi (fb, 2), gFBl (fb, 3), gFBf (fb, 4), gFBf (fb, 5))
调试输出 (gFBs (fb, 6), gFB (fb, 7))
调试输出 (gFBb (fb, 8), gFB (fb, 8))  ' 逻辑型在FB中统一1字节
连续赋值 (0, char, short, int, float, double, int64)  ' 这里清空仅为了不受旧值干扰
bool = 假
string = “”
bytes = {  }
deFB (fb, char, short, int, int64, float, double, string, bytes, bool)
调试输出 (“——————————————————————————————————”)
调试输出 (char, short, int, int64, float, double)
调试输出 (string, bytes)
调试输出 (bool)
子程序名返回值类型公开备 注
TEST_基本类型含数组  
变量名类 型静态数组备 注
charArr字节型3
boolArr逻辑型3尽管易语言内部是4字节,封包后统一约定1字节
shortArr短整数型3
intArr整数型3
int64Arr长整数型3
floatArr小数型3
doubleArr双精度小数型3
stringArr文本型3
bytesArr字节集3
fb字节集 
fb = FB (charArr, boolArr)
调试输出 (fb)  ' (1+2+1)*4+{ [4+3(+1)] + [4+3(+1)] }
shortArr = { 111, 2222 }  ' 可动态与之前声明的大小不同
fb = FB (shortArr, { 123, 4567, 89101112, 666, 77 })  ' 可直接投入字面量(整型)数组
连续赋值 ({  }, shortArr, intArr)  ' 这里清空仅为了不受旧值干扰
deFB (fb, shortArr, intArr)
调试输出 (shortArr, intArr)
stringArr [1]“aaaaa”
stringArr [2]“bb”
stringArr [3]“cccc”
bytesArr [2]到字节集 (“hello world”)
fb = FB (stringArr, bytesArr)
清除数组 (stringArr)
deFB (fb, stringArr)
调试输出 (stringArr, bytesArr)


i支持库列表   支持库注释   
bcFB(未知支持库)
spec特殊功能支持库


复合结构体嵌套示例(易语言)
  
数据类型名公开备 注
A 
成员名类 型传址数组备 注
a短整数型  
b文本型  
数据类型名公开备 注
B 
成员名类 型传址数组备 注
aaA  
bb字节集 1
数据类型名公开备 注
C 
成员名类 型传址数组备 注
aaaA 2
bbbB 1
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
子程序_TESTA ()
' 子程序_TESTB ()
' 子程序_TESTC ()
子程序名返回值类型公开备 注
子程序_TESTA  
变量名类 型静态数组备 注
oA 
dat字节集 
o_A 
o.a = 123
o.b = “hello”
dat = FB_A (o)
调试输出 (dat)
deFB_A (pFB (dat), o_)
调试输出 (o_.a, o_.b)
子程序名返回值类型公开备 注
子程序_TESTB  
变量名类 型静态数组备 注
oB 
a字节集0
fb字节集 
o_bb字节集0
p_aa子程序指针 
p整数型 
o_B 
o.aa.a = 123666  ' 注意易语言这里是有符号短整数
o.aa.b = “你好”
o.bb [1]到字节集 (“hello”)
fb = FB_B (o)
deFB_B (pFB (fb), o_)
调试输出 (o_.aa.a, o_.aa.b, o_.bb)
子程序名返回值类型公开备 注
子程序_TESTC  
变量名类 型静态数组备 注
oC 
fb字节集 
o_C 
重定义数组 (o.bbb, 假, 3)  ' 这里可后期随意动态重定义,可以与原先易语言表格中的不一样
o.aaa [1].a = 123
o.aaa [1].b = “你是真的6”
o.bbb [1].aa.a = 12306
o.bbb [1].aa.b = “你好啊”
o.bbb [1].bb [1]到字节集 (“hello”)
fb = FB_C (o)
' 调试输出 (fb)
deFB_C (pFB (fb), o_)
调试输出 (o_.aaa [1].a, o_.aaa [1].b)
调试输出 (o_.bbb [1].aa.a, o_.bbb [1].aa.b)
调试输出 (o_.bbb)  ' 数组:3{(?未知?),(?未知?),(?未知?)}
调试输出 (o_.bbb [1].bb)


i支持库列表   支持库注释   
spec特殊功能支持库
bcFB(未知支持库)

PS:源码中使用上了支持库,原因是只有支持库才能提供必需的基础类型反射,不过源码中已包含支持库源码可放心食用(有能力可以自行编译,此外易语言静态库没打包在里头,可加我群里免费获得)

最后欢迎加群讨论【白易语言研究院】:Q群668536886


白菜跨语言数据请求与解包1.0.zip

1.37 MB, 下载次数: 5, 下载积分: 精币 -2 枚


 楼主| 发表于 4 天前 | 显示全部楼层   广东省深圳市
本帖最后由 不知道 于 2025-12-29 14:14 编辑

看来"feng包"一词被卦佬们玩坏了,之前标题打这两个字被论坛系统替换成了"请求",我现改成了"打包"以免产生误会
下集预告,白菜通信过程调用模块源码
——涵盖:协程(及其扩展接口+已实现的部分协程生态)、IPC(进程间通信)、RPC(基于TCP/HTTP的远程过程调用)
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 昨天 09:39 | 显示全部楼层   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 前天 09:36 | 显示全部楼层   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 3 天前 | 显示全部楼层   广西壮族自治区玉林市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 3 天前 | 显示全部楼层   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:25% (1/4)
发表于 4 天前 | 显示全部楼层   四川省泸州市
白菜跨语言数据类型打包与解包标准
回复 支持 反对

使用道具 举报

结帖率:96% (448/468)

签到天数: 2 天

发表于 4 天前 | 显示全部楼层   内蒙古自治区乌海市
支持开源
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)
发表于 4 天前 | 显示全部楼层   广东省佛山市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 4 天前 | 显示全部楼层   广东省汕头市
感谢大神分享~!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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