VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

字串轉換成含正負符號的整數值

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2160


第 1 樓

發表發表於: 星期五 八月 25, 2006 10:08 am    文章主題: 字串轉換成含正負符號的整數值 引言回覆

代碼:

*==============================================================================================
* 函數: StrToInteger
* 狀態: Public
* 用途: 轉換字符串到整型值
* 參數: StrValue - 要轉換的值
*      SignedFlag - .T. 若是有符號的值
* 返回值: 整型的值
* 運行環境:適應於INTEL CPU 的 低字在前高字在後 的操作系統
* 例: StrToInteget( chr(254)+chr(255) , .t. )      &&--含有正負符號的短整數, 值從 -32768, 到 32767
*==============================================================================================
FUNCTION StrToInteger(StrValue AS String,SignedFlag AS Boolean )

    local lnDecimal,lnLen,lnI,lnMax
   
    lnDecimal = 0
    lnLen = len(StrValue)
    IF lnLen > 8
        MESSAGEBOX('要求的字節數大太,不能超過8個字節,即64位值。',0,'錯誤信息')
       RETURN 0
    ENDIF
    for lnI = 1 to lnLen
        lnDecimal = lnDecimal + asc(substr(StrValue, lnI, 1)) * 256^ (lnI-1)         &&以 256 進制方式計算無符號值
    next lnI
   
    if SignedFlag and BITTEST(lnDecimal,((lnLen * 8) - 1))         &&判斷是否是有符號值,並且是負值
        IF lnLen > 4
              lnDecimal = (lnDecimal - 2^32) - 2^((lnLen-4)*8)     && 得到 lnDecimal 的補數
        ELSE
              lnDecimal = lnDecimal - 2^(lnLen*8)
        ENDIF
    ENDIF
       
    return INT(lnDecimal)
endfunc         && StrToInteger 函數結束

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作