【已解决】字符串转为数字 再转10进制的问题
本帖最后由 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, "^+$") 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 $_OTP =number(StringRight(FileReadLine($_ModuleIDTxt, 1),6))
这样行不行,如果不行,可能就是行尾的换行符的事了 第4行增加:MsgBox(0,0,Execute('0x'&$_OTP)/2000)
第5行及以后注释掉。 本帖最后由 touch_xu 于 2010-10-27 12:17 编辑
可以是我没有表达清楚吧,我要的结果是字符串"68306" 当做数字在16进制状态下,68306/2000=34
给写出在读txt到得到34这个结果的表达式就可以了,但是上面的结果都不是整数,不是我想的结果,谢谢.
我最终要用的结果把34转换的成十进制的52,我本想有个算定义的_HexToDec($sHexStr),就好了,但是我还是说出来,或许大侠们有更方便的方法,以免转一个进制带要这么麻烦,谢谢了 你的表达有点饶啊。
"68306"是字符串?
2000是0x2000?
$str='68306'
$hex=0x2000
$n=Int(Execute('0x'&$str)/$hex)
MsgBox(0,0,$n) 你的表达有点饶啊。
"68306"是字符串?
2000是0x2000?
3mile 发表于 2010-10-27 13:39 http://www.autoitx.com/images/common/back.gif
68306是从TXT中读出来的,算不算呢,我也分不清,但是我把它当数字进行转换时结果不对
十分感谢3mile,正解,谢谢. 回复 6# touch_xu
其实你在计算器中计算就知道为什么不是整数了。
16进制运算:68306/2000*2000 学习了,高手就是厉害啊!
页:
[1]