16bits to +32767 ~ -32767 |
答題得分者是:ccjl123
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Dears:
小弟有個數值轉換對應的問題想請教大家,手上有個軟體會做數值轉換的運算 已知 input range:16bits, output range:32767(0x7fff) ~ -32767(0x8001) 想要找出對應公式,目前小弟算出來會差1,但仍想得到正確結果,謝謝大家 例如:輸入(10進位表示), 輸出(16進位表示) 輸入 輸出
| ||||||||||||||||||||||||||||||||||||||||||||||||
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
||||||||||||||||||||||||||||||||||||||||||||||||
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||||||||||
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
前輩,不好意思小弟舉的範例不好讓您誤會,再舉一個例子 小弟目前的做法是先找出min and max, 然後offset讓數據通通變成正值 等比例放大後,再-0x8000 d為最後的結果,但跟原始的AP仍有差異 if (d >= max){ d = 0x7fff; }else if (d <= min){ d = 0x8001; }else{ double adj = 0.0; if (min < 0){ adj = ((double)(d abs(min)) / (max - min)) * 65536; }else if (min > 0){ adj = ((double)(d - min) / (max - min)) * 65536; }else{ adj = ((double)d / (max - min)) * 65536; } | ||||||||||||||||||||||||||||||||||||||||||||||||
me | |||||||||||||||||||||||||||||||||||||||||||||||||
12787 | 7fff | 7fff | |||||||||||||||||||||||||||||||||||||||||||||||
-12604 | 8001 | 8001 | |||||||||||||||||||||||||||||||||||||||||||||||
-11442 | 8bb8 | 8bb7 | |||||||||||||||||||||||||||||||||||||||||||||||
11348 | 717d | 717e |
AP | 6720 | 42d4 | 42d5 |
-2108 | e9d3 | e9d3 | |
-7624 | b236 | b236 | |
10560 | 698b | 698c | |
717e |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |