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

C關於"轉換損失精度"的問題

答題得分者是:harrypp
kagaya
中階會員


發表:74
回覆:175
積分:59
註冊:2002-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-08 14:03:10 IP:59.120.xxx.xxx 訂閱
請教各位高手
小弟我有一隻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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-08 15:50:36 IP:59.125.xxx.xxx 訂閱

或許可以找找是否有 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-08 16:23:10 IP:59.120.xxx.xxx 訂閱
大大您好
這是一個網路上找到的jpeg decode c 原始碼
所以可能沒有區分win或linux版
由於我win的電腦是32位元cpu linux的電腦是64位元
不知是否有關聯?
該怎麼修改才能讓它正常運行?
謝謝
------
KUSO 無處不在
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-08 17:23:27 IP:210.202.xxx.xxx 訂閱
建議你查查看linux上int的定義是幾位元,再把他強制轉型。

不過分享以前經驗,
若是程式內的bit運算很多的話,
原作有時求快寫死或是沒考慮好,
這在跨平台都會死的很慘且很難抓Bug,
還不如重弄一套該環境的funtion。

比如~7
16bit是FFF8
32bit則變成FFFFFFF8
kagaya
中階會員


發表:74
回覆:175
積分:59
註冊:2002-12-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-08 20:54:55 IP:220.139.xxx.xxx 訂閱
大大您好
這程式只有三行有這個問題
在win上也測試ok了
所以若為了這三行放棄整個程式有點可惜呢
不知有無更好的方式
謝謝
------
KUSO 無處不在
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-09-08 22:14:43 IP:114.32.xxx.xxx 訂閱
所以你先查看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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-09-08 22:34:34 IP:61.229.xxx.xxx 訂閱
感謝大大的回答
那我明天試試看再上來報告
謝謝
------
KUSO 無處不在
harrypp
中階會員


發表:7
回覆:124
積分:61
註冊:2006-08-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-09-08 23:20:54 IP:114.32.xxx.xxx 訂閱
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-09-09 09:54:43 IP:59.120.xxx.xxx 訂閱
感謝大大的回覆
改成unsigned long之後
果然可以run了
真是太高興了
也讓我了解不少相關知識
謝謝
------
KUSO 無處不在
編輯記錄
kagaya 重新編輯於 2009-09-09 09:56:10, 註解 無‧
系統時間:2024-04-20 11:02:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!