C關於"轉換損失精度"的問題 |
答題得分者是:harrypp
|
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
請教各位高手
小弟我有一隻Qt程式 在windows下編譯ok 但拿到linux下編譯就會出現error 顯示"轉換損失精度" 從void*轉為unsigned int 如下 unsigned char *c = (unsigned char*) (((unsigned int) alloc(64) 7) & ~7); 下面的q是unsigned char* 轉 unsigned int q = (unsigned char*) (((unsigned int)q 7) & ~7); 遇到這樣的問題不知道該如何修改才好? 謝謝
------
KUSO 無處不在 |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
或許可以找找是否有 linux 下的版本 因為這行 unsigned char *c = (unsigned char*) (((unsigned int) alloc(64) 7) & ~7); 用法比較特殊 ===================引 用 kagaya 文 章=================== 請教各位高手 小弟我有一隻Qt程式 在windows下編譯ok 但拿到linux下編譯就會出現error 顯示"轉換損失精度" 從void*轉為unsigned int 如下 unsigned char *c = (unsigned char*) (((unsigned int) alloc(64) 7) & ~7); 下面的q是unsignedchar* 轉 unsigned int q= (unsigned char*) (((unsigned int)q 7) & ~7); 遇到這樣的問題不知道該如何修改才好? 謝謝 |
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
|
harrypp
中階會員 發表:7 回覆:124 積分:61 註冊:2006-08-31 發送簡訊給我 |
|
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
|
harrypp
中階會員 發表:7 回覆:124 積分:61 註冊:2006-08-31 發送簡訊給我 |
所以你先查看linux的int是幾bit的?alloc是回傳幾bit?
有可能unsigned char *是64bit, 就像BCB上有int16,int32,int64....可以指定! 我手邊環境沒問題,所以無法幫你找問題。 另一個辦法, 你可以把上述一行拆成數行放小程式內, 再debug 看asm裡是幾bit在處理。 雖然目前只是compiler三行過不了, 但編譯過了不表示程式內沒其它羅輯問題, 有時是開發者當初沒考慮32,64bit, 以前寫32bit driver轉64bit driver, 最後雖編譯成功但執行時一堆bug。
編輯記錄
harrypp 重新編輯於 2009-09-08 22:18:48, 註解 無‧
|
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
|
harrypp
中階會員 發表:7 回覆:124 積分:61 註冊:2006-08-31 發送簡訊給我 |
int是32bit,但你char *是64bit,
所以你可以試試用unsigned long 或是參考一下這篇 在 UNIX 下面,我們可以改用 stdint.h 這個 header file 中對於資料型態的定義 http://blog.csdn.net/zhlynn/archive/2009/05/29/4223910.aspx |
kagaya
中階會員 發表:74 回覆:175 積分:59 註冊:2002-12-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |