線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2072
推到 Plurk!
推到 Facebook!

關於十六進制與十進制轉換,有點難....><

尚未結案
shazi
一般會員


發表:1
回覆:0
積分:0
註冊:2005-09-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-23 23:29:18 IP:140.126.xxx.xxx 未訂閱
假設以下是我in_buf陣列的資料,以十六進制的方式儲存 in_buf[0] = 0x00; //in_buf[0] = 0xff; //如果是ff,表示負數 in_buf[1] = 0x50; in_buf[2] = 0x80;//20608 or -20608 我想要做得是,先將陣列的值組合起來,例:005080(十六進制)轉成20608(十進制),這樣子該怎麼做呢? 以下是別人給我的提示,利用sprintf可以直接做轉換,不用去一個一個計算 但是我還是做不太出來,可以幫幫我嗎? (在編譯時,無法辨識ntoh) int *p; p = in_buf; sprintf("%d",ntoh(*p)); printf("%d",out_buf);
jim1247
一般會員


發表:8
回覆:20
積分:5
註冊:2003-01-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-25 10:33:02 IP:59.120.xxx.xxx 未訂閱
以下範例請參考,應該是你要的    
 
void main()
{
    // 依編譯器不同, int型態所佔的byte數也不同
    // Turbo C   int佔2 byte, BCB則是4 byte
    // 本範例是用Turbo C  為例
    union _int_buf{       // 宣告共用記憶體變數
        char ch[4];       // char型態佔4 byte
        long i;           // long型態佔4 byte(BCB可直接宣告成int)
    }int_buf;
    int_buf.ch[0] = 0x00;  // 指定該char的值
    int_buf.ch[1] = 0x00;
    int_buf.ch[2] = 0x50;
    int_buf.ch[3] = 0x80;        // 以long型態印出資料
    printf("%ld",int_buf.i);        // 另外依CPU不同, 印出的數值也會不同
    // 原因請參考其他關於記憶體排列方式的文章
}
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-05 09:35:20 IP:211.20.xxx.xxx 未訂閱
你好: 其實在程式中用0x10 跟 直接輸入16,並不需要做進制的轉換的。 例如: int a = 0x10; int b = 16; a 跟 b 是相同的。 在你的程式中,以in_buf來存放資料。以32位元作業系統來看,int的值是4byte,因此in_buf的長度應該為4。 如下: in_buf[0] = 0x00; in_buf[1] = 0x00; in_buf[2] = 0x50; in_buf[3] = 0x80; 爾後再用 int *p = (int *)in_buf; printf("%d", *p); 就可將該值以int Type顯示出來。
系統時間:2024-04-28 3:51:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!