开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 6441|回复: 4
收起左侧

[已回应] 进制_十到十六EX(最长可支持到64位长整数型数值)

[复制链接]
结帖率:25% (4/16)
发表于 2021-11-28 04:25:24 | 显示全部楼层 |阅读模式   四川省乐山市
说明一下,这个代码是我搜集的,感觉比精易模块里面的更强大,项目部的你们看一下

  
子程序名返回值类型公开备 注
进制_十到十六EX文本型 返回把长整数型值转换为16个字符组成的16进制文本
参数名类 型参考可空数组备 注
十进制值长整数型最长可支持到64位长整数型数值.返回16个字符16进制文本
取字符数整数型默认返回 FFFFFFFF 共8个字符,可以指定返回多少个字符
变量名类 型静态数组备 注
十六进制文本型 
' 004033BA    8B45 10             mov     eax, dword ptr [ebp+10]          ; EAX=长度
' 004033BD    83F8 11             cmp     eax, 11                          ; 大于16?
' 004033C0    73 05               jnb     short 004033C7                   ; >16 跳
' 004033C2    83F8 00             cmp     eax, 0                           ; 大于0?
' 004033C5    75 05               jnz     short 004033CC                   ; <>0 跳
' 004033C7    B8 08000000         mov     eax, 8                           ; 字符08个
' 004033CC    8945 14             mov     dword ptr [ebp+14], eax          ; 非空=长度
' 8B 45 10 83 F8 11 73 05 83 F8 00 75 05 B8 08 00 00 00 89 45 14
置入代码 ({ 139, 69, 16, 131, 248, 17, 115, 5, 131, 248, 0, 117, 5, 184, 8, 0, 0, 0, 137, 69, 20 })
十六进制 = 取文本左边 (“0000000000000000”, 16)  ' 可写内存
取字符数 = 取文本型指针 (十六进制)  ' 参数1=文本指针
' 77C62FD7    51              push    ecx                              ; 备份寄存器
' 77C62FD8    52              push    edx
' 77C62FD9    53              push    ebx
' 77C62FDA    B9 10000000     mov     ecx, 10                          ; ECX=16除数
' 77C62FDF    8B5D 10         mov     ebx, dword ptr [ebp+10]          ; EBX=文本指针
' 77C62FE2    83C3 0F         add     ebx, 0F                          ; EBX=低文本尾
' 77C62FE5    8B45 08         mov     eax, dword ptr [ebp+8]           ; EAX=低位
' 77C62FE8    85C0            test    eax, eax                         ; 数值=0?
' 77C62FEA    74 11           je      short 77C62FFD                   ; 等于0 跳
' 77C62FEC    33D2            xor     edx, edx                         ; EDX=0 余
' 77C62FEE    F7F1            div     ecx                              ; 除以16
' 77C62FF0    83FA 0A         cmp     edx, 0A                          ; 余>10
' 77C62FF3    72 03           jb      short 77C62FF8                   ; 小于 跳
' 77C62FF5    83C2 07         add     edx, 7                           ; 英文+55
' 77C62FF8    0013            add     byte ptr [ebx], dl               ; 数值+48
' 77C62FFA    4B              dec     ebx                              ; 递减指针
' 77C62FFB  ^ EB EB           jmp     short 77C62FE8                   ; 继续循环
' 77C62FFD    837D 0C 00      cmp     dword ptr [ebp+C], 0             ; 高位=0?
' 77C63001    74 0B           je      short 77C6300E                   ; 等于0 跳
' 77C63003    8745 0C         xchg    dword ptr [ebp+C], eax           ; 高低交换
' 77C63006    8B5D 10         mov     ebx, dword ptr [ebp+10]          ; EBX=文本指针
' 77C63009    83C3 07         add     ebx, 7                           ; EBX=高文本尾
' 77C6300C  ^ EB DA           jmp     short 77C62FE8                   ; 继续循环
' 77C6300E    5B              pop     ebx
' 77C6300F    5A              pop     edx
' 77C63010    59              pop     ecx                              ; 恢复寄存器
' 77C63011    8B45 14         mov     eax, dword ptr [ebp+14]          ; EAX=长度
' 77C63014    8945 10         mov     dword ptr [ebp+10], eax          ; 参数2=长度
' 51 52 53 B9 10 00 00 00 8B 5D 10 83 C3 0F 8B 45 08 85 C0 74 11 33 D2 F7 F1 83 FA 0A 72 03 83 C2
' 07 00 13 4B EB EB 83 7D 0C 00 74 0B 87 45 0C 8B 5D 10 83 C3 07 EB DA 5B 5A 59 8B 45 14 89 45 10
置入代码 ({ 81, 82, 83, 185, 16, 0, 0, 0, 139, 93, 16, 131, 195, 15, 139, 69, 8, 133, 192, 116, 17, 51, 210, 247, 241, 131, 250, 10, 114, 3, 131, 194, 7, 0, 19, 75, 235, 235, 131, 125, 12, 0, 116, 11, 135, 69, 12, 139, 93, 16, 131, 195, 7, 235, 218, 91, 90, 89, 139, 69, 20, 137, 69, 16 })
返回 (取文本右边 (十六进制, 取字符数))

评分

参与人数 1好评 +1 精币 +5 收起 理由
项目部004 + 1 + 5 感谢你的支持,精易有你更精彩

查看全部评分

发表于 2023-9-26 11:28:43 | 显示全部楼层   河北省石家庄市
????????????????????????
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2021-11-28 16:00:24 | 显示全部楼层   江苏省泰州市
这不就是万挂作坊的
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 11 天

发表于 2021-11-28 11:32:38 | 显示全部楼层   广西壮族自治区崇左市
本帖最后由 福仔 于 2021-11-28 11:53 编辑
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
调试输出 (子程序1 (-1, 256, 真, ))
子程序名返回值类型公开备 注
子程序1文本型 
参数名类 型参考可空数组备 注
十进制值长整数型
取字符数整数型
是否为小写逻辑型
不用0x开头逻辑型
变量名类 型静态数组备 注
buf文本型 
fmt文本型 
bufSize整数型 
fmt = 取空白文本 (20)
' 这里是拼接格式化使用的文本
' 第一个%s 是是否使用0x, 使用就传0x, 不使用就传空文本
' 第二个%% 弄一个百分号
' 第三个0 是不足位数使用0补充, 使用其他的话把0改成其他就行
' 第四个%d 是把16进制转成多少位数
' 第五个%s 是大写还是小写, llx, 大写就用大写的X, 小写就用小写
sprintf_s_神烦易语言不能无限参数_同一个功能还得定义N多个命令 (fmt, 20, “%s%%0%d%s”, 选择 (不用0x开头, “”, “0x”), 取字符数, 选择 (是否为小写, “llx”, “llX”))
判断 (取字符数 < 16)
' 小于16的话需要给19个字节的缓冲区
' 不然传递进来的数超大的话, 缓冲区就不够了
' 长整数最大16个字符, 加上0x, 再加上结束标识
' 最少需要19个字符
bufSize = 19
bufSize = 取字符数 + 3

' 因为易语言的文本已经有结束标识了, 这里申请空白字符可以-1
buf = 取空白文本 (bufSize - 1)
sprintf_s (buf, bufSize, fmt, 十进制值)  ' 这里的缓冲区尺寸不能-1, 否则会失败
调试输出 (fmt)
返回 (buf)


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




稍微修改了一下

评分

参与人数 1好评 +1 精币 +5 收起 理由
项目部004 + 1 + 5 感谢你的支持,精易有你更精彩

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 11 天

发表于 2021-11-28 11:31:48 | 显示全部楼层   广西壮族自治区崇左市
本帖最后由 福仔 于 2021-11-28 11:37 编辑

QQ截图20211128113016.png
QQ截图20211128113040.png

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
调试输出 (子程序1 (123))
子程序名返回值类型公开备 注
子程序1文本型 
参数名类 型参考可空数组备 注
十进制值长整数型
取字符数整数型
是否为小写逻辑型
不用0x开头逻辑型
变量名类 型静态数组备 注
buf文本型 
fmt文本型 
fmt = 取空白文本 (20)
' 第一个%s 是是否使用0x, 使用就传0x, 不使用就传空文本
' 第二个%% 弄一个百分号
' 第三个0 是不足位数使用0补充, 使用其他的话把0改成其他就行
' 第四个%d 是把16进制转成多少位数
' 第五个%s 是大写还是小写, llx, 大写就用大写的X, 小写就用小写
sprintf_s_神烦易语言不能无限参数_同一个功能还得定义N多个命令 (fmt, 20, “%s%%0%d%s”, 选择 (不用0x开头, “”, “0x”), 取字符数, 选择 (是否为小写, “llx”, “llX”))
buf = 取空白文本 (20)
sprintf_s (buf, 20, fmt, 十进制值)
返回 (buf)
DLL命令名返回值类型公开备 注
sprintf_s整数型 
DLL库文件名:
ntdll.dll
在DLL库中对应命令名:
@sprintf_s
参数名类 型传址数组备 注
buf文本型
size整数型
fmt文本型
num长整数型
DLL命令名返回值类型公开备 注
sprintf_s_神烦易语言不能无限参数_同一个功能还得定义N多个命令整数型 
DLL库文件名:
ntdll.dll
在DLL库中对应命令名:
@sprintf_s
参数名类 型传址数组备 注
buf文本型
size整数型
fmt文本型
a文本型
a整数型
a文本型



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



效率跟你比起来不知道怎样, 但是这个人人都能维护....







点评

缓冲区数量有问题, 不能固定死20个字符, 如果 (取字符数) 小于16, 那可以这么长, 不然应该至少需要 (取字符数 + 3) 个字符, 0x占用2个字符, 结束标识+1   广西壮族自治区崇左市  发表于 2021-11-28 11:41
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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