本帖最后由 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
|