精易论坛

标题: 字节集怎么到二进制0 1 [打印本页]

作者: fengyewl    时间: 2024-11-29 01:12
标题: 字节集怎么到二进制0 1
字节集怎么到二进制0 1

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


然后已二进制发送出去

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

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

字节集到二进制 (buffer)




全_HTTP服务.SendWSMessageEx (全_HTTP句柄, 到整数 (编辑框_转发客户id.内容), 局_是否结束帧, 局_RSV, 局_操作码, buffer, 取字节集长度 (buffer))
byte_array = bytes([0x0A, 0x0B])binary_str = ""for byte in byte_array:    binary_str += bin(byte)[2:].zfill(8)print(binary_str)




[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翻译有点不对。




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


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




补充内容 (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 解码等),方便开发人员查看代码执行过程中数据的处理情况。
总体而言,这段代码实现了一个简单的消息数据解析和分类处理逻辑,针对不同格式的消息数据(以特定头部标识区分视频流数据和其他文本类数据等)执行相应的操作,不过代码可能需要完善变量声明以及考虑更多的错误处理等情况来增强健壮性和规范性。
作者: xiaoyu1986    时间: 2024-11-29 01:21
真是辛苦你了,写了这么多。。。不过这图二并不是二进制啊。
并且tcp或者websocket也不会发送和接收二进制。
你看到的这些是十六进制,用字节集_十六进制到字节集()还原成字节集数据就是收发数据的原始状态了。
图一,那接收的玩意,明显是图片的base64编码格式啊。。。

补充内容 (2024-11-29 01:23):
如果字节集_十六进制到字节集()还原成原始的字节集数据,到文本是乱码的话,那说明数据不是被压缩了,就是被加密了。被压缩的可能性大。
作者: fengyewl    时间: 2024-11-29 01:41
xiaoyu1986 发表于 2024-11-29 01:21
真是辛苦你了,写了这么多。。。不过这图二并不是二进制啊。
并且tcp或者websocket也不会发送和接收二进制 ...

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

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


这个参数1是如“00BFAD00”

我这个接收的是        base64编码

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

这个不对啊
作者: 汉族    时间: 2024-11-29 01:44
二进制 就是吧  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  
作者: fengyewl    时间: 2024-11-29 01:52
汉族 发表于 2024-11-29 01:44
二进制 就是吧  HEX转换到01 的数据 不过 这个 有个码表
hex    bye
0      0000

不会写例子,,,,能帮忙写一个例子吗
作者: 大漠小鸟    时间: 2024-11-29 02:10
字节集本身就是最小单位了,传输协议说的二进制传输,指的就是字节集,不太可能会有用二进制文本进行传输,本来一个字节用二进制文本传输变成8个字节了。

传输大概率就是二进制直接传输,顶多使用base64
作者: 梦幻1096    时间: 2024-11-29 02:59
  
子程序名返回值类型公开备 注
字节集到二进制字节集字节集 返回二进制字节集
参数名类 型参考可空数组备 注
欲转换的字节集字节集
变量名类 型静态数组备 注
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 })
返回 (“”)


这样?

作者: chenboss    时间: 2024-11-29 03:58
有没有一种可能,SendWSMessageEx不能发字节集,换个能发字节集的命令解码发送就好了
作者: b0y    时间: 2024-11-29 08:42
你图片最后一张 也是16进制啊   对字节集每一位进制转换为2位16进制
作者: fengyewl    时间: 2024-11-29 12:41
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”,类型为“长整数型”,允许接收空参数数据。注明:消息总长度 。
作者: fengyewl    时间: 2024-11-29 12:42
chenboss 发表于 2024-11-29 03:58
有没有一种可能,SendWSMessageEx不能发字节集,换个能发字节集的命令解码发送就好了 ...

必须带0结尾  这个有点搞不懂  是后面加一个0?   
作者: fengyewl    时间: 2024-11-29 12:44
b0y 发表于 2024-11-29 08:42
你图片最后一张 也是16进制啊   对字节集每一位进制转换为2位16进制

我不知道是什么,他显示是二进制,以为就是
  
这个应该怎么写  发送他这个是数据了   base64  转换为 进制发送吗?



全_HTTP服务.SendWSMessageEx (全_HTTP句柄, 到整数 (编辑框_转发客户id.内容), 局_是否结束帧, 局_RSV, 局_操作码, return, 取字节集长度 (buffer))





    子程序名: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”,类型为“长整数型”,允许接收空参数数据。注明:消息总长度 。
作者: fengyewl    时间: 2024-11-29 13:01
梦幻1096 发表于 2024-11-29 02:59
[e=1].版本 2

.子程序 字节集到二进制字节集, 字节集, 公开, 返回二进制字节集

还是不行接收都是空
作者: fengyewl    时间: 2024-11-29 13:02
这个是 .版本 2

    全_HTTP服务.SendWSMessageEx (全_HTTP句柄, 到整数 (编辑框_转发客户id.内容), 局_是否结束帧, 局_RSV, 局_操作码, 字节集到二进制字节集 (buffer), 取字节集长度 (buffer))

33.png (31.84 KB, 下载次数: 1)

33.png

26.png (29.05 KB, 下载次数: 0)

26.png

12.png (107.16 KB, 下载次数: 0)

12.png

作者: 梦幻1096    时间: 2024-11-29 14:47
fengyewl 发表于 2024-11-29 13:01
还是不行接收都是空

你这buffer是啥内容啊
作者: fengyewl    时间: 2024-11-29 15:33
梦幻1096 发表于 2024-11-29 14:47
你这buffer是啥内容啊

base64编码  字节集 图片数据
作者: fengyewl    时间: 2024-11-29 21:50
    function onMessage(evt) {       var messageData = new Uint8Array(evt.data);       unit8_data = new Uint8Array(messageData)       window.data_size += unit8_data.length       //window.parent.data_sizeAdd(unit8_data.length);       start_code = unit8_data.slice(0, 5).join('')       // 1.视频流数据         console.log("视频流数据",start_code);       if (start_code.startsWith('0001')) {         window.frame_cnt += 1            console.log("视频流数据   0001");         window.video_player_feed(unit8_data)       } else if (start_code.startsWith('0002')) {             console.log("视频流数据   0002");         data = unit8_data.slice(5)         if (start_code.endsWith('0')) {           string_data = new TextDecoder("utf-8").decode(data);           window.parent.copyString(string_data);               console.log("视频流数据  utf-8");         }       }     }




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4