开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 514|回复: 23
收起左侧

[易语言] 字节集怎么到二进制0 1

[复制链接]
结帖率:82% (36/44)
发表于 2024-11-29 01:12:30 | 显示全部楼层 |阅读模式   湖北省荆州市
12精币
字节集怎么到二进制0 1

buffer = 到字节集 (json.取通用属性 (“data”))  ' 取出编码数据

QQ图片20241129010603.png
然后已二进制发送出去

下面这个图我网页接收是 Base64,是不对的。需要他发送二进制进行解析
文本到二进制 (到文本 (buffer))

应该是这个转换,这个不会写求助了

字节集到二进制 (buffer)

VX截图_20241129010723.png


全_HTTP服务.SendWSMessageEx (全_HTTP句柄, 到整数 (编辑框_转发客户id.内容), 局_是否结束帧, 局_RSV, 局_操作码, buffer, 取字节集长度 (buffer))
  • 字节集转换为二进制
    • 原理:字节集中的每个字节都可以用 8 位二进制数来表示。将字节集中的每个字节依次转换为二进制形式,然后组合起来,就可以得到对应的二进制表示。
    • 示例(以简单的字节集为例)
      • 假设我们有一个字节集,包含两个字节,其十六进制表示为 [0A, 0B]。
      • 首先将每个字节转换为二进制。字节 0A(十六进制)转换为二进制是 00001010,字节 0B(十六进制)转换为二进制是 00001011。
      • 组合起来,这个字节集对应的二进制表示就是 0000101000001011。
    • 在编程语言中的实现(以 Python 为例)
      • 可以使用bin()函数来将字节转换为二进制。
byte_array = bytes([0x0A, 0x0B])binary_str = ""for byte in byte_array:    binary_str += bin(byte)[2:].zfill(8)print(binary_str)



  • 在这个代码中,bytes([0x0A, 0x0B])创建了一个字节集。然后通过循环,对于字节集中的每个字节,使用bin()函数将其转换为二进制字符串形式(bin()函数返回的字符串前面会有0b前缀,所以使用[2:]来去掉前缀),并使用zfill(8)来确保每个字节对应的二进制字符串长度为 8 位。最后将这些二进制字符串组合起来。

  • 二进制转换为字节集
    • 原理:将二进制数据按照每 8 位一组进行划分,然后将每组二进制数转换为对应的十进制数(字节的值),这些十进制数组成的序列就可以转换为字节集。
    • 示例
      • 假设我们有二进制数据 0000101000001011。
      • 按照每 8 位一组划分,得到 00001010 和 00001011。
      • 00001010(二进制)转换为十进制是 10(十六进制为 0A),00001011(二进制)转换为十进制是 11(十六进制为 0B)。
      • 所以对应的字节集就是十六进制表示为 [0A, 0B] 的字节集。
    • 在编程语言中的实现(以 Python 为例)
      • 可以使用int()函数和字节操作来实现
[color=rgba(0, 0, 0, 0.85)]以下是将上述 Python 代码转换为易语言代码的示例,功能是将字节集转换为对应的二进制字符串表示:

[color=rgba(0, 0, 0, 0.85)]

[color=rgba(0, 0, 0, 0.85)]

.版本 2.程序集 窗口程序集_启动窗口.子程序 _按钮1_被单击    ' 定义字节集    局部变量 字节集数据, 字节集    字节集数据 = { 0x0A, 0x0B }    ' 用于拼接二进制字符串的变量    局部变量 二进制字符串, 文本型    局部变量 单个字节, 整数型    局部变量 索引, 整数型    ' 循环遍历字节集中的每个字节    计次循环首 (取字节集长度 (字节集数据), 索引)        单个字节 = 取字节集数据 (字节集数据, 索引)        二进制字符串 = 二进制字符串 + 十到二进制 (单个字节, 8)    计次循环尾 ()    信息框 (二进制字符串, 0, )
AI翻译有点不对。




-------------------------------------------------------------------------------


需要下面这个图,发送过去一样,才会被网页接收解析

VX截图_20241129010640.png


补充内容 (2024-11-29 23:46):
代码功能概述
这段代码定义了一个名为 onMessage 的函数,很可能是用于处理接收到的消息数据(从函数参数 evt 推测,通常在类似 WebSocket 等消息接收场景下使用)。其主要功能是解析接收到的 Uint8Array 类型的数据(消息数据),根据数据开头的特定标识(以 0001 或 0002 开头)来执行不同的操作,同时记录一些相关的统计信息(如数据大小、视频帧计数等)。
变量及操作分析
消息数据处理与变量初始化:
var messageData = new Uint8Array(evt.data);:从传入的事件对象 evt 的 data 属性获取数据,并创建一个 Uint8Array 类型的数组 messageData 来存储它,这意味着消息数据被视为 8 位无符号整数数组进行后续处理。
unit8_data = new Uint8Array(messageData):又创建了一个同样基于 messageData 的新 Uint8Array,不过这里代码中没有使用 var、let 或 const 关键字声明变量,可能会存在潜在的变量作用域问题(取决于代码所在的完整上下文,如果在严格模式下可能会报错)。
window.data_size += unit8_data.length:将接收到的 unit8_data 的长度累加到 window 对象的 data_size 属性上,用于统计累计接收到的数据大小。
提取数据头部标识:
start_code = unit8_data.slice(0, 5).join(''):从 unit8_data 数组中取出前 5 个元素,通过 join('') 方法将它们转换为字符串,以此得到数据头部的标识字符串,后续会根据这个标识判断数据类型并执行相应逻辑。
条件分支逻辑
视频流数据处理(标识为 0001 开头):
if (start_code.startsWith('0001')):判断如果数据头部标识以 0001 开头,则认为是视频流相关数据。
window.frame_cnt += 1:在这种情况下,将 window 对象的 frame_cnt 属性(可能用于统计视频帧的数量)加 1。
window.video_player_feed(unit8_data):调用 window 对象上的 video_player_feed 函数,并将整个 unit8_data 作为参数传入,推测这个函数用于将视频流数据传递给视频播放相关的处理逻辑进行播放等操作。
其他数据处理(标识为 0002 开头):
else if (start_code.startsWith('0002')):当数据头部标识以 0002 开头时进入此分支。
data = unit8_data.slice(5):先从 unit8_data 中取出从索引 5 开始的剩余数据部分,赋值给 data 变量,意味着去除了头部标识相关的前面部分字节。
进一步根据结尾标识判断并处理数据(如果以 0 结尾):
if (start_code.endsWith('0')):若数据头部标识以 0 结尾,则执行以下操作。
string_data = new TextDecoder("utf-8").decode(data);:使用 TextDecoder(以 utf-8 编码方式)将 data 所代表的字节数据解码为字符串,存储到 string_data 变量中。
window.parent.copyString(string_data);:调用 window.parent 对象上的 copyString 函数,并传入解码后的字符串,具体功能可能是将该字符串复制到其他地方或者进行进一步的文本相关处理,取决于 copyString 函数的具体实现。
控制台输出
代码中在各个关键逻辑判断处都添加了 console.log 语句,用于在控制台输出相关的调试信息,比如输出接收到的数据是何种类型的视频流数据(以 0001 开头、以 0002 开头等情况)以及对数据的解码情况(如 utf-8 解码等),方便开发人员查看代码执行过程中数据的处理情况。
总体而言,这段代码实现了一个简单的消息数据解析和分类处理逻辑,针对不同格式的消息数据(以特定头部标识区分视频流数据和其他文本类数据等)执行相应的操作,不过代码可能需要完善变量声明以及考虑更多的错误处理等情况来增强健壮性和规范性。


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:99% (126/127)

签到天数: 21 天

发表于 2024-11-29 01:21:19 | 显示全部楼层   贵州省贵阳市
真是辛苦你了,写了这么多。。。不过这图二并不是二进制啊。
并且tcp或者websocket也不会发送和接收二进制。
你看到的这些是十六进制,用字节集_十六进制到字节集()还原成字节集数据就是收发数据的原始状态了。
图一,那接收的玩意,明显是图片的base64编码格式啊。。。

补充内容 (2024-11-29 01:23):
如果字节集_十六进制到字节集()还原成原始的字节集数据,到文本是乱码的话,那说明数据不是被压缩了,就是被加密了。被压缩的可能性大。

点评

哥这个能玩动吗   湖北省荆州市  发表于 2024-11-29 22:11
回复

使用道具 举报

结帖率:82% (36/44)

签到天数: 16 天

 楼主| 发表于 2024-11-29 01:41:41 | 显示全部楼层   湖北省荆州市
xiaoyu1986 发表于 2024-11-29 01:21
真是辛苦你了,写了这么多。。。不过这图二并不是二进制啊。
并且tcp或者websocket也不会发送和接收二进制 ...

adb推过来的视频流是 base64编码   需要转换为二进制  

  子程序名:字节集_十六进制到字节集;  所处模块: 精易模块
    将一串十六进制文本还原为字节集。还原为字节集可以将默认的16进制文本转换成字节集。如“00BFAD00”可还原为{0,191,173,0}
    返回值类型:字节集
    参数<1>的名称为“原始16进制文本”,类型为“文本型”。注明:如“00BFAD00AFD4FD4F9E054F9FF91FC5FF2076FBAFDB071044”。


这个参数1是如“00BFAD00”

我这个接收的是        base64编码

用ws发送过去是二进制才行

这个不对啊
回复

使用道具 举报

结帖率:87% (20/23)

签到天数: 9 天

发表于 2024-11-29 01:44:12 | 显示全部楼层   广东省东莞市
二进制 就是吧  HEX转换到01 的数据 不过 这个 有个码表
hex    bye
0      0000
1      0001
2      0010
3      0011
4      0100
……
F     1111

如果是  按照 8位  二进制 来说 就是
0      0000
1     0001
10    00010000

10的转换 2进制  就是(16是 把10转换回10进制 计算的) 16/2=8‘0  8/2=4’0  4/2=2‘0  2/2=1’0  1/2=0‘1    点后 全是余数 从后面 拿 就是  10000  补上前面3个0  00010000  
……
FF    11111111


补充内容 (2024-11-29 01:44):
应该叫做  BIN  

点评

写好了,有个问题 ,转2进制 很快 但是 转回来 慢 我在找方案   广东省东莞市  发表于 2024-11-29 22:37
看不懂 bin 有没有例子呢   湖北省荆州市  发表于 2024-11-29 22:12
回复

使用道具 举报

结帖率:82% (36/44)

签到天数: 16 天

 楼主| 发表于 2024-11-29 01:52:58 | 显示全部楼层   湖北省荆州市
汉族 发表于 2024-11-29 01:44
二进制 就是吧  HEX转换到01 的数据 不过 这个 有个码表
hex    bye
0      0000

不会写例子,,,,能帮忙写一个例子吗
回复

使用道具 举报

结帖率:95% (19/20)

签到天数: 19 天

发表于 2024-11-29 02:10:08 | 显示全部楼层   福建省宁德市
字节集本身就是最小单位了,传输协议说的二进制传输,指的就是字节集,不太可能会有用二进制文本进行传输,本来一个字节用二进制文本传输变成8个字节了。

传输大概率就是二进制直接传输,顶多使用base64

点评

他是视频流,怎么接收还不知道   湖北省荆州市  发表于 2024-11-29 22:12
回复

使用道具 举报

签到天数: 13 天

发表于 2024-11-29 02:59:46 | 显示全部楼层   广东省深圳市
  
子程序名返回值类型公开备 注
字节集到二进制字节集字节集 返回二进制字节集
参数名类 型参考可空数组备 注
欲转换的字节集字节集
变量名类 型静态数组备 注
len整数型 
bin字节集 
如果真 (欲转换的字节集 = {  })
返回 ({  })
len = 取字节集长度 (欲转换的字节集)
bin = 取空白字节集 (len × 8)
置入代码 ({ 139, 93, 8, 139, 27, 131, 195, 8, 139, 117, 248, 131, 198, 8, 255, 77, 252, 120, 32, 185, 8, 0, 0, 0, 178, 128, 138, 3, 73, 120, 17, 132, 208, 117, 5, 198, 6, 0, 235, 3, 198, 6, 1, 70, 208, 234, 235, 236, 67, 235, 219, 139, 69, 248, 201, 194, 4, 0 })
返回 ({  })
子程序名返回值类型公开备 注
字节集到二进制文本文本型 返回二进制文本
参数名类 型参考可空数组备 注
欲转换的字节集字节集
变量名类 型静态数组备 注
text文本型 
len整数型 
如果真 (欲转换的字节集 = {  })
返回 (“”)
len = 取字节集长度 (欲转换的字节集)
text = 取空白文本 (len × 8)
置入代码 ({ 139, 93, 8, 139, 27, 131, 195, 8, 139, 117, 248, 255, 77, 252, 120, 32, 185, 8, 0, 0, 0, 178, 128, 138, 3, 73, 120, 17, 132, 208, 117, 5, 198, 6, 48, 235, 3, 198, 6, 49, 70, 208, 234, 235, 236, 67, 235, 219, 139, 69, 248, 201, 194, 4, 0 })
返回 (“”)


这样?

点评

接收不到,发过去不识别 function onMessage(evt) { var messageData = new Uint8Array(evt.data); unit8_data = new Uint8Array(messageData) window.data_size += unit8_dat...   湖北省荆州市  发表于 2024-11-29 22:13
回复

使用道具 举报

结帖率:100% (3/3)

签到天数: 21 天

发表于 2024-11-29 03:58:21 | 显示全部楼层   福建省莆田市
有没有一种可能,SendWSMessageEx不能发字节集,换个能发字节集的命令解码发送就好了

点评

可以发   湖北省荆州市  发表于 2024-11-29 22:14
回复

使用道具 举报

结帖率:100% (20/20)

签到天数: 20 天

发表于 2024-11-29 08:42:50 | 显示全部楼层   浙江省杭州市
你图片最后一张 也是16进制啊   对字节集每一位进制转换为2位16进制

点评

哥 这个怎么转换呢?有没有例子呢   湖北省荆州市  发表于 2024-11-29 22:14
回复

使用道具 举报

结帖率:82% (36/44)

签到天数: 16 天

 楼主| 发表于 2024-11-29 12:41:28 | 显示全部楼层   湖北省荆州市
chenboss 发表于 2024-11-29 03:58
有没有一种可能,SendWSMessageEx不能发字节集,换个能发字节集的命令解码发送就好了 ...

    子程序名:SendWSMessageEx;  所处模块: HPSocket For E  6.0.2 rc2
    名称:发送 WebSocket 消息 描述:向对端端发送 WebSocket 消息,TRUE-- 成功,FALSE-- 失败,/
    返回值类型:逻辑型
    参数<1>的名称为“hServer”,类型为“整数型”。
    参数<2>的名称为“dwConnID”,类型为“整数型”。注明:连接 ID。
    参数<3>的名称为“bFinal”,类型为“逻辑型”。注明:是否结束帧。
    参数<4>的名称为“iReserved”,类型为“字节型”。注明:RSV1/RSV2/RSV3 各 1 位。
    参数<5>的名称为“iOperationCode”,类型为“字节型”。注明:操作码:0x0 - 0xF。
    参数<6>的名称为“lpBody”,类型为“通用型”,接收参数数据时采用参考传递方式。注明:回复的数据,可以是字节集、文本型、文本指针(必须带0结尾,如果不带0则使用相同命令名不带Ex结尾的命令)。
    参数<7>的名称为“ullBodyLen”,类型为“长整数型”,允许接收空参数数据。注明:消息总长度 。
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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