【源码+思路】随机生成汉字

按键精灵小Q
按键精灵官方账号
2022-09-20 15:01:08

作者:昨夜星辰

思路:
1、通过网上查阅的资料可知,汉字的Unicode编码范围为十六进制4E00~9FA5。
2、通过Randomize及Rnd函数,生成一个在汉字编码范围内的数字。
3、通过ChrW函数得到编码数字对应的汉字。

注:十六进制数4E00~9FA5,亦可写为十进制数19968~40869,出于教学目的,本帖不应用十进制写法。

由于涉及十六进制数,故需要用到&H来将十六进制转换为十进制。所以,在写代码之前,我们需要弄懂下面几点。

什么是十六进制数?
十六进制是一种基数为16的计数系统,是一种逢16进1的进位制。通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F表示,其中A~F表示10~15,这些称作十六进制数。

十六进制数的应用范围?
在按键精灵中十六进制主要用于memory地址及RGB图色数据。图色数据可参考:【源码+思路】计算偏色之RGB篇

&H的作用是什么?
可以通过在数字前面添加前缀&H来表示十六进制数。例如,在十六进制计数法中,&H10表示十进制数16。亦可通过Hex函数将十进制数转换为十六进制数,例如Hex("16")得到十进制数10。

但是在使用&H时有一点务必要注意,&H是根据你输入的数据来自动调整数据为整型或长整型,而十六进制是由补码的方式来表达负数。规则为负数的补码是它本身的值每位求反,最后再加1。在整型情况下,十进制数24667的十六进制为605B,-24667则为9FA5。而长整型情况下,十进制数24667的十六进制为0000605B,-24667则为FFFF9FA5。比如&H9FA5,按照我们的想法应该得到十进制的40869,但却得到了-24667。通过TypeName(&H9FA5)可知返回的是整型(Integer),而非长整型(Long),故而发生了错误。解决方案是在数据末尾再加一个&,即&H9FA5&,其作用是将数据强制按照长整型进行运算,如此以来便能得到正确的结果。

注:0000605B亦可写作605B,&H9FA5&亦可写作&H00009FA5&,数字中前端的0可忽略。

源码:
 

Function 随机生成汉字(位数)

随机生成汉字 = ""

For 位数

随机生成汉字 = 随机生成汉字 & ChrW(生成随机数(&H4E00&, &H9FA5&))

Next

End Function

Function 生成随机数(num1, num2)

Dim L, U

L = num1

U = num2

If num1 > num2 Then

L = num2

U = num1

End If

Randomize

生成随机数 = CLng(Int((U - L + 1) * Rnd + L))

End Function

 


调用方法:
TracePrint 随机生成汉字(6)
调试结果:
脚本 我的脚本.Q ,第1行:匑鷳请媖鴔躕

原文地址:http://bbs.anjian.com/showtopic-701856-1.aspx

...全文
236 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

11

社区成员

发帖
与我相关
我的任务
社区描述
按键精灵交流阵地
其他 企业社区
社区管理员
  • 按键精灵小Q
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧