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

0-255 的數值利用char 再組合成AnsiString的方式會產生誤差 詳見內文

答題得分者是:暗黑破壞神
tyw6455
一般會員


發表:7
回覆:9
積分:3
註冊:2005-06-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-21 18:15:17 IP:58.99.xxx.xxx 訂閱
我用亂數產生器產生一連串0~255的數值
然後我用下列的方式把產生的數值組成一個字串:
[code cpp]
int iHigh;
char cHigh;
AnsiString sData = 0;

for (int i = 0; i < 401; i )
{
iHigh = random(256);
cHigh = iHigh;
sData = (AnsiString)cHigh;
}
[/code]

然後再用SubString的方式把sData裡面的每一個一個還原成數值
結果發現產生的數值跟組成字串後再拆解的數值份會不一樣
下面是兩個產生出來的值
亂數產生器產生的數值
46 74 174 46 204 102 19 109 79 59 121 178 165 251 98 231 156 60 237 145
組成字串之後再轉換的值
46 74 -82 46 -52 102 19 109 79 59 121 -78 -91 -5 98 -25 -100 60 -19 -111
當然這只是一部份的值
請問為什麼會有這樣的結果呢?有什麼辦法可以解決?
當然用char的陣列就可以解決了不過有時候字串會比較方便有誰能提供意見嗎?謝謝
編輯記錄
tyw6455 重新編輯於 2007-09-21 18:16:24, 註解 無‧
tyw6455 重新編輯於 2007-09-26 09:37:10, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-21 18:27:50 IP:61.225.xxx.xxx 未訂閱
請注意你的 char 是有號還是無號數?
你有沒有發現出來多個負號?
自己換算看看,應該就可以查出來都是超過127以上的部份出問題吧.
tyw6455
一般會員


發表:7
回覆:9
積分:3
註冊:2005-06-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-21 20:44:14 IP:59.126.xxx.xxx 訂閱
原來如此
謝謝你囉

我解決的方式是
在轉換的時候
把承接的字元直接宣告成
unsigned char
這樣出來的數值就和亂數產生器產生的數值一樣了,
不過不知道這樣會不會有其他想不到的隱憂存在就是了
編輯記錄
tyw6455 重新編輯於 2007-09-26 09:36:41, 註解 無‧
tyw6455 重新編輯於 2007-09-26 09:38:53, 註解 無‧
系統時間:2024-04-27 7:23:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!