touch_xu 发表于 2010-10-27 11:09:30

【已解决】字符串转为数字 再转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

netegg 发表于 2010-10-27 11:26:48

$_OTP =number(StringRight(FileReadLine($_ModuleIDTxt, 1),6))
这样行不行,如果不行,可能就是行尾的换行符的事了

3mile 发表于 2010-10-27 11:48:56

第4行增加:MsgBox(0,0,Execute('0x'&$_OTP)/2000)
第5行及以后注释掉。

touch_xu 发表于 2010-10-27 12:11:50

本帖最后由 touch_xu 于 2010-10-27 12:17 编辑

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


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

3mile 发表于 2010-10-27 13:39:31

你的表达有点饶啊。
"68306"是字符串?
2000是0x2000?
$str='68306'
$hex=0x2000
$n=Int(Execute('0x'&$str)/$hex)
MsgBox(0,0,$n)

touch_xu 发表于 2010-10-27 13:43:53

你的表达有点饶啊。
"68306"是字符串?
2000是0x2000?
3mile 发表于 2010-10-27 13:39 http://www.autoitx.com/images/common/back.gif


   68306是从TXT中读出来的,算不算呢,我也分不清,但是我把它当数字进行转换时结果不对
十分感谢3mile,正解,谢谢.

3mile 发表于 2010-10-27 13:46:35

回复 6# touch_xu
其实你在计算器中计算就知道为什么不是整数了。
16进制运算:68306/2000*2000

nxbigdaddy 发表于 2010-10-28 10:27:18

学习了,高手就是厉害啊!
页: [1]
查看完整版本: 【已解决】字符串转为数字 再转10进制的问题