全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1774
推到 Plurk!
推到 Facebook!

如何轉換64bit

尚未結案
mis273
一般會員


發表:5
回覆:5
積分:2
註冊:2003-04-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-04 20:01:12 IP:140.131.xxx.xxx 未訂閱
請問, 請問各位高手,我在delphi中若有一Int64之數值,但,是為一16進位值,是否有function或API可以轉換呢,用htonl只能轉32bits的值,那64bits的怎麼做呢? 很急...謝謝!
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-04 20:38:31 IP:211.74.xxx.xxx 未訂閱
引言: 請問, 請問各位高手,我在delphi中若有一Int64之數值,但,是為一16進位值,是否有function或API可以轉換呢,用htonl只能轉32bits的值,那64bits的怎麼做呢? 很急...謝謝!
要轉成什麼!? 學而時習之不亦樂乎!
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-04 23:38:20 IP:218.162.xxx.xxx 未訂閱
IntToHex可以把數字轉成一個16進位值 不過你既然是一個64bit數值?怎會又是一個16進位的值? 還是你是一個16進位的字串要轉成64Bit的數值?用StrToInt($FF)也可以轉
mis273
一般會員


發表:5
回覆:5
積分:2
註冊:2003-04-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-05 17:55:30 IP:203.69.xxx.xxx 未訂閱
對不起,我說的不夠清楚..我的意思是說,有一INT64的數值,要如何轉成可讀的10進位數值!謝謝各位.....
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-05 22:29:20 IP:218.162.xxx.xxx 未訂閱
引言: 對不起,我說的不夠清楚..我的意思是說,有一INT64的數值,要如何轉成可讀的10進位數值!謝謝各位.....
還是不懂..你是要轉成可讀的
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-05 22:52:01 IP:210.66.xxx.xxx 未訂閱
數值轉字串?字串轉數值?int64轉integer?!
int64並不能轉成integer; //因為int64佔8byte integer佔4byte
除非你要捨棄另外4個byte.
  TInt64Ex = record
    Case Byte of
      0:(Value:Int64);      //分成1個Int64
      1:(Low,High:Integer); //分成2個Integer
      2:(L2,L1,H2,H1:Word); //亦能分成4個Word
  end;
var
  I:Int64;
  j:Integer;
begin
  i:=999999999999999999999...;
  j:=TInt64Ex(i).High;  //這是Int64高位元組
  j:=TInt64Ex(i).Low;   //這是Int64低位元組
end;    
學而時習之不亦樂乎! 發表人 - jest0024 於 2004/05/05 22:53:06
sherryliu
一般會員


發表:2
回覆:2
積分:0
註冊:2004-03-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-06 23:01:31 IP:61.59.xxx.xxx 未訂閱
真的..不好意思,我再說明一下我的問題.. 就是從大型主機會傳來一Int64 的數值,但是呢,這個數字是必須要經過壓縮(或轉型)才可讀的,例如,32位元的數值可以用htonl來轉,但delphi好像沒有可以轉64bits的api,所以,才有這個問題..謝謝大家! 啊..我就是
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-07 01:06:00 IP:203.67.xxx.xxx 未訂閱
因為Windows系統裡並內支援到64bit的函數. 1.可以判斷htonl這支函數的計算方式,自己做個函式包裝起來. 2.傳回的Int64能否分為2個Integer處理!? 3.傳回的Int64值是否介於-2147483648..2147483647,如果介於這二個值之間   便使用轉型成integer處理,若超過這2個值的話,可能得依照方法1或2處理 4.依htonl函數得到以下的算法
uses Math;    function htonlEx(Const Value:Integer):Integer; //模擬htonl寫的函數
begin
  Result:=Trunc(Power(2,24)*(Value mod 256) Power(2,16)*(Value div 56));
  //2^16次方後會錯誤,因為算法還是有些錯誤..不過大致上如此
end;
function IntToHex(Value: Int64; Digits: Integer): string; overload; 在重覆宣告函數時,內的參數須與已宣告內不同,因為你上方的宣告在SysUtils內已宣告過了,所以會錯誤!! 學而時習之不亦樂乎! 發表人 - jest0024 於 2004/05/07 01:21:03
系統時間:2024-05-21 21:53:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!