开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 173|回复: 8
收起左侧

[讨论] 关于整数转字节集

[复制链接]
结帖率:75% (3/4)
发表于 13 小时前 | 显示全部楼层 |阅读模式   江苏省南京市
本帖最后由 VTwinkle 于 2024-11-21 00:53 编辑

QQ20241121-004626.png 这个函数 多线程跑起来,只要频繁调用, 会在某个瞬间内存泄漏 然后闪退,循环内不加处理事件就会卡CPU一会就闪退了,如果加了不占CPU,但是也只是延迟了闪退,有没有不闪退能实现相同方案的办法。


下面的汇编代码 QQ20241121-004911.png
  
子程序名返回值类型公开备 注
varint字节集 
参数名类 型参考可空数组备 注
value长整数型
变量名类 型静态数组备 注
data2字节型16
count整数型 
bin字节集 
count = 1
循环判断首 ()
data2 [count]到字节 (位或_ (位与_ (value, 127), 128))
count = count + 1
value = 右移_ (value, 7)
循环判断尾 (value ≠ 0)
data2 [count - 1]位与_ (data2 [count - 1], 127)
重定义数组 (data2, 真, count - 1)
bin = 到字节集 (data2)
返回 (选择 (取字节集长度 (bin) > 1, bin, { 0 } + bin))
子程序名返回值类型公开备 注
右移_长整数型 将某整数的数据位右移指定位数,返回移动后的结果。本命令为中级命令。
参数名类 型参考可空数组备 注
欲移动的整数长整数型
欲移动的位数整数型
置入代码 ({ 137, 229, 139, 69, 8, 139, 85, 12, 139, 77, 16, 232, 4, 0, 0, 0, 93, 194, 12, 0, 128, 249, 64, 115, 22, 128, 249, 32, 115, 6, 15, 173, 208, 211, 250, 195, 137, 208, 193, 250, 31, 128, 225, 31, 211, 248, 195, 193, 250, 31, 137, 208, 195 })
返回 (0)
子程序名返回值类型公开备 注
左移_长整数型 将某整数的数据位左移指定位数,返回移动后的结果。本命令为中级命令。
参数名类 型参考可空数组备 注
欲移动的整数长整数型
欲移动的位数整数型
置入代码 ({ 137, 229, 139, 69, 8, 139, 85, 12, 139, 77, 16, 232, 4, 0, 0, 0, 93, 194, 12, 0, 128, 249, 64, 115, 21, 128, 249, 32, 115, 6, 15, 165, 194, 211, 224, 195, 137, 194, 49, 192, 128, 225, 31, 211, 226, 195, 49, 192, 49, 210, 195 })
返回 (0)
子程序名返回值类型公开备 注
位与_长整数型 如两个数值有某共同比特位为1,则返回值的对应位也为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
参数名类 型参考可空数组备 注
位运算数值一长整数型
位运算数值二长整数型
置入代码 ({ 137, 229, 139, 69, 8, 35, 69, 16, 139, 85, 12, 35, 85, 20, 93, 194, 16, 0 })
返回 (0)
子程序名返回值类型公开备 注
位或_长整数型 如两个数值中有一个数值的某一比特位不为零,则返回值的对应位就为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
参数名类 型参考可空数组备 注
位运算数值一长整数型
位运算数值二长整数型
置入代码 ({ 137, 229, 139, 69, 8, 11, 69, 16, 139, 85, 12, 11, 85, 20, 93, 194, 10, 0 })
返回 (0)

结帖率:50% (1/2)

签到天数: 18 天

发表于 1 小时前 | 显示全部楼层   广西壮族自治区贵港市
  
子程序名返回值类型公开备 注
__指针到整数整数型 
参数名类 型参考可空数组备 注
ptr整数型
返回 (取字节集数据 (指针到字节集 (ptr, 4), #整数型, ))
子程序名返回值类型公开备 注
_EncodeVarint64字节集 
参数名类 型参考可空数组备 注
val长整数型
变量名类 型静态数组备 注
i整数型 
n长整数型 
buf字节集 
temp字节集 
' 实现方式:[url]https://segmentfault.com/a/1190000020500985?utm_source=tag-newest[/url]
' 源码参考:[url]https://play.golang.org/p/KoriwT3rwHZ[/url]
buf = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
判断循环首 ()
如果真 (_位运算_与 (val, 128) = 0)
如果真 (_位运算_右移 (val, 7) = 0)
跳出循环 ()

i = i + 1
如果真 (i > 10)
返回 ({  })
buf [i]到字节 (_位运算_或 (128, _位运算_与 (val, 127)))
val = _位运算_右移 (val, 7)
判断循环尾 ()
i = i + 1
buf [i]到字节 (val)
返回 (取字节集左边 (buf, i))
子程序名返回值类型公开备 注
_DecodeVarint64长整数型 
参数名类 型参考可空数组备 注
buf字节集
num整数型
变量名类 型静态数组备 注
shift整数型 
b长整数型 
val长整数型 
如果真 (取字节集长度 (buf) = 0)
返回 (0)
shift = 0
num = 0
判断循环首 (num < 取字节集长度 (buf))
num = num + 1
b = 到长整数 (buf [num])
val = _位运算_或 (val, _位运算_左移 (_位运算_与 (b, 127), shift))
如果真 (_位运算_与 (b, 128) = 0)
返回 (val)
shift = shift + 7
判断循环尾 ()
返回 (val)
子程序名返回值类型公开备 注
_位运算_与长整数型 
参数名类 型参考可空数组备 注
值1长整数型
值2长整数型
变量名类 型静态数组备 注
result长整数型 
ptr_1整数型 
ptr_2整数型 
ptr_result整数型 
result = 0
ptr_result = 取变量数据地址 (result)
ptr_1 = 取变量数据地址 (值1)
ptr_2 = 取变量数据地址 (值2)
写到内存 (位与 (__指针到整数 (ptr_1), __指针到整数 (ptr_2)), ptr_result, 4)
写到内存 (位与 (__指针到整数 (到整数 (ptr_1 + 4)), __指针到整数 (到整数 (ptr_2 + 4))), 到整数 (ptr_result + 4), 4)
返回 (result)
子程序名返回值类型公开备 注
_位运算_或长整数型 
参数名类 型参考可空数组备 注
值1长整数型
值2长整数型
变量名类 型静态数组备 注
result长整数型 
ptr_1整数型 
ptr_2整数型 
ptr_result整数型 
result = 0
ptr_result = 取变量数据地址 (result)
ptr_1 = 取变量数据地址 (值1)
ptr_2 = 取变量数据地址 (值2)
写到内存 (位或 (__指针到整数 (ptr_1), __指针到整数 (ptr_2)), ptr_result, 4)
写到内存 (位或 (__指针到整数 (到整数 (ptr_1 + 4)), __指针到整数 (到整数 (ptr_2 + 4))), 到整数 (ptr_result + 4), 4)
返回 (result)
子程序名返回值类型公开备 注
_位运算_异或长整数型 
参数名类 型参考可空数组备 注
值1长整数型
值2长整数型
变量名类 型静态数组备 注
result长整数型 
ptr_1整数型 
ptr_2整数型 
ptr_result整数型 
result = 0
ptr_result = 取变量数据地址 (result)
ptr_1 = 取变量数据地址 (值1)
ptr_2 = 取变量数据地址 (值2)
写到内存 (位异或 (__指针到整数 (ptr_1), __指针到整数 (ptr_2)), ptr_result, 4)
写到内存 (位异或 (__指针到整数 (到整数 (ptr_1 + 4)), __指针到整数 (到整数 (ptr_2 + 4))), 到整数 (ptr_result + 4), 4)
返回 (result)
子程序名返回值类型公开备 注
_位运算_取反长整数型 
参数名类 型参考可空数组备 注
长整数型
变量名类 型静态数组备 注
result长整数型 
ptr_1整数型 
ptr_2整数型 
ptr_result整数型 
ptr整数型 
result = 0
ptr_result = 取变量数据地址 (result)
ptr = 取变量数据地址 ()
写到内存 (位取反 (__指针到整数 (ptr)), ptr_result, 4)
写到内存 (位取反 (__指针到整数 (到整数 (ptr + 4))), ptr_result, 4)
返回 (result)
子程序名返回值类型公开备 注
_位运算_左移长整数型 
参数名类 型参考可空数组备 注
长整数型
位数整数型
返回 (allmul (值, 到长整数 (求次方 (2, 位数))))
子程序名返回值类型公开备 注
_位运算_右移长整数型 
参数名类 型参考可空数组备 注
长整数型
位数整数型
返回 (aulldiv (值, 到长整数 (求次方 (2, 位数))))
子程序名返回值类型公开备 注
_位运算_取值逻辑型 
参数名类 型参考可空数组备 注
长整数型
位置整数型0-63
变量名类 型静态数组备 注
ptr长整数型 
val整数型 
bit逻辑型 
如果真 (位置 < 0 位置 > 63)
返回 ()
ptr = 取变量数据地址 ()
如果真 (位置 > 31)
ptr = ptr + 4
位置 = 位置 - 32
val = __指针到整数 (ptr)
bit = 位与 (val, 左移 (1, 位置)) ≠ 0
返回 (val ≠ 0)
子程序名返回值类型公开备 注
_位运算_置值逻辑型 
参数名类 型参考可空数组备 注
长整数型
位置整数型0-63
置值逻辑型
变量名类 型静态数组备 注
ptr长整数型 
val整数型 
bit逻辑型 
new整数型 
如果真 (位置 < 0 位置 > 63)
返回 ()
ptr = 取变量数据地址 ()
如果真 (位置 > 31)
ptr = ptr + 4
位置 = 位置 - 32
val = __指针到整数 (ptr)
bit = 位与 (val, 左移 (1, 位置)) ≠ 0
判断 (置值)
new = 位或 (val, 左移 (1, 位置))
判断 (bit)
new = 位与 (val, 位取反 (左移 (1, 位置)))


写到内存 (new, ptr, 4)
返回 (bit)
DLL命令名返回值类型公开备 注
allmul长整数型 带符号乘法
DLL库文件名:
ntdll.dll
在DLL库中对应命令名:
_allmul
参数名类 型传址数组备 注
a长整数型
b长整数型
DLL命令名返回值类型公开备 注
alldiv长整数型 带符号除法
DLL库文件名:
ntdll.dll
在DLL库中对应命令名:
_alldiv
参数名类 型传址数组备 注
a长整数型
b长整数型
DLL命令名返回值类型公开备 注
aullrem长整数型 无符号求余数
DLL库文件名:
ntdll.dll
在DLL库中对应命令名:
_aullrem
参数名类 型传址数组备 注
a长整数型
b长整数型
DLL命令名返回值类型公开备 注
aulldiv长整数型 无符号除法
DLL库文件名:
ntdll.dll
在DLL库中对应命令名:
_aulldiv
参数名类 型传址数组备 注
a长整数型
b长整数型



i支持库列表   支持库注释   
spec特殊功能支持库


有手就行
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 21 天

发表于 9 小时前 | 显示全部楼层   福建省莆田市
本帖最后由 chenboss 于 2024-11-21 05:09 编辑
VTwinkle 发表于 2024-11-21 04:28
你这个是字节变整数

回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 1 天

 楼主| 发表于 10 小时前 | 显示全部楼层   江苏省南京市
dnxl 发表于 2024-11-21 03:37
置入代码 ({ 137, 229, 139, 69, 8, 139, 85, 12, 139, 77, 16, 232, 4, 0, 0, 0, 93, 194, 12, 0, 128, 24 ...

好像有长的,速度不快。
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 1 天

 楼主| 发表于 10 小时前 | 显示全部楼层   江苏省南京市
chenboss 发表于 2024-11-21 02:56
取字节集数据 ({  }, 4, )

你这个是字节变整数
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 1 天

 楼主| 发表于 10 小时前 | 显示全部楼层   江苏省南京市
大漠小鸟 发表于 2024-11-21 02:25
[e=1].版本 2

.子程序 VarInt, 字节集

我试试
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 21 天

发表于 11 小时前 | 显示全部楼层   广西壮族自治区柳州市
置入代码 ({ 137, 229, 139, 69, 8, 139, 85, 12, 139, 77, 16, 232, 4, 0, 0, 0, 93, 194, 12, 0, 128, 249, 64, 115, 22, 128, 249, 32, 115, 6, 15, 173, 208, 211, 250, 195, 137, 208, 193, 250, 31, 128, 225, 31, 211, 248, 195, 193, 250, 31, 137, 208, 195 })
这个右移明显有BUG啊,12字节的参数居然最后是195(ret) 没平栈
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 21 天

发表于 11 小时前 | 显示全部楼层   福建省莆田市
取字节集数据 ({  }, 4, )
回复 支持 反对

使用道具 举报

结帖率:95% (18/19)

签到天数: 21 天

发表于 12 小时前 | 显示全部楼层   福建省宁德市
  
子程序名返回值类型公开备 注
VarInt字节集 
参数名类 型参考可空数组备 注
value长整数型
变量名类 型静态数组备 注
bin字节集 
i整数型 
bin = 取空白字节集 (16)
循环判断首 ()
i = i + 1
bin [i]位或 (位与 (value, 127), 128)
value = 右移64 (value, 7)
循环判断尾 (value ≠ 0)
如果真 (i > 0)
bin [i]位与 (bin [i], 127)
如果真 (i = 1)
i = i + 1
返回 (取字节集左边 (bin, i))
  
子程序名返回值类型公开备 注
右移64长整数型 将某长整数的数据位右移指定位数,返回移动后的结果。
参数名类 型参考可空数组备 注
欲移动的长整数长整数型
欲移动的位数整数型为0直接返回,如果超过长整数位数将计算错误。
置入代码 ({ 139, 69, 8, 139, 85, 12, 139, 77, 16, 133, 201, 116, 8, 209, 234, 209, 216, 254, 201, 117, 248, 201, 194, 12, 0 })
返回 (0)

回复 支持 1 反对 0

使用道具 举报

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

本版积分规则 致发广告者

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

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

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