找回密码
 加入
搜索
查看: 4660|回复: 7

[AU3基础] 【已解决】字符串转为数字 再转10进制的问题

  [复制链接]
发表于 2010-10-27 11:09:30 | 显示全部楼层 |阅读模式
本帖最后由 touch_xu 于 2010-10-27 13:45 编辑

从TXT中读取了068306(这是16进制的数字),我要把它当做数字转换为10进制.
但是下面的代码却把它当做字符串处理,我要的结果是34(68306/2000)
请求解答.谢谢.
#Include <String.au3>
$_ModuleIDTxt = "C:\Module_ID.txt"
$_OTP =StringRight(FileReadLine($_ModuleIDTxt, 1),6)

MsgBox(0,0,_HexToDec($_OTP)/2000)

;============================================================================

===
; 说明:   十六进制转换为十进制
; 语法:   _HexToDec($sHexStr)
; 参数:   $sHexStr - 需要转换的十六进制字符
; 需要:   无
; 返回:   成功 - 十进制整数
;         失败 - 空字符 "", 并设置 @error 到 1
; 备注:   注意: 输入超过 999999999999999d / 38d7ea4c67fffh 将输出指数形式
;============================================================================

===
Func _HexToDec($sHexStr)
        Local $sDecStr = 0
        If NOT StringRegExp($sHexStr, "^[0-9A-Fa-f]+$") Then Return SetError

(1, 0, "")
 
        $sHexStr = StringUpper($sHexStr)
        For $i = 1 To StringLen($sHexStr)
                Switch StringMid($sHexStr, StringLen($sHexStr) - $i + 1, 1)
                        Case "0"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 0
                        Case "1"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 1
                        Case "2"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 2
                        Case "3"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 3
                        Case "4"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 4
                        Case "5"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 5
                        Case "6"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 6
                        Case "7"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 7
                        Case "8"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 8
                        Case "9"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 9
                        Case "A"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 10
                        Case "B"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 11
                        Case "C"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 12
                        Case "D"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 13
                        Case "E"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 14
                        Case "F"
                                $sDecStr = $sDecStr + 16 ^ ($i - 1) * 15
                EndSwitch
        Next
 
        Return $sDecStr
EndFunc   ;==>_HexToDec

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-10-27 11:26:48 | 显示全部楼层
$_OTP =number(StringRight(FileReadLine($_ModuleIDTxt, 1),6))
这样行不行,如果不行,可能就是行尾的换行符的事了

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-10-27 11:48:56 | 显示全部楼层
第4行增加:MsgBox(0,0,Execute('0x'&$_OTP)/2000)
第5行及以后注释掉。

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-10-27 12:11:50 | 显示全部楼层
本帖最后由 touch_xu 于 2010-10-27 12:17 编辑

可以是我没有表达清楚吧,我要的结果是字符串"68306" 当做数字在16进制状态下,68306/2000=34


给写出在读txt到得到34这个结果的表达式就可以了,但是上面的结果都不是整数,不是我想的结果,谢谢.
我最终要用的结果把34转换的成十进制的52,我本想有个算定义的_HexToDec($sHexStr),就好了,但是我还是说出来,或许大侠们有更方便的方法,以免转一个进制带要这么麻烦,谢谢了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-10-27 13:39:31 | 显示全部楼层
你的表达有点饶啊。
"68306"是字符串?
2000是0x2000?
$str='68306'
$hex=0x2000
$n=Int(Execute('0x'&$str)/$hex)
MsgBox(0,0,$n)
 楼主| 发表于 2010-10-27 13:43:53 | 显示全部楼层
你的表达有点饶啊。
"68306"是字符串?
2000是0x2000?
3mile 发表于 2010-10-27 13:39



   68306是从TXT中读出来的,算不算呢,我也分不清,但是我把它当数字进行转换时结果不对
十分感谢3mile,正解,谢谢.
发表于 2010-10-27 13:46:35 | 显示全部楼层
回复 6# touch_xu
其实你在计算器中计算就知道为什么不是整数了。
16进制运算:68306/2000*2000

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

发表于 2010-10-28 10:27:18 | 显示全部楼层
学习了,高手就是厉害啊!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 02:20 , Processed in 0.090677 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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