關於十六進制與十進制轉換,有點難....>< |
尚未結案
|
shazi
一般會員 發表:1 回覆:0 積分:0 註冊:2005-09-13 發送簡訊給我 |
假設以下是我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 發送簡訊給我 |
以下範例請參考,應該是你要的
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 發送簡訊給我 |
你好:
其實在程式中用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顯示出來。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |