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

為什麼等號(=)兩邊的值會不相等?

缺席
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-02 08:07:24 IP:59.120.xxx.xxx 訂閱

小弟要改寫公司前人留下的程式時發現下面這一個 Function,Function 中傳入的參數 Byte 值為 80,可是小弟在 Function 內加入兩道 ShowMessage 顯示 Function 的計算結果,忽然間發現,等號(=) 的兩邊值是不相等的,我臆測應該是 Result 型態是 Byte,而等號右邊計算出來的是 Integer,而 Delphi 自動轉換型別了~

問題是,目前是以 C# 改寫下面 Function 使用 Convert.ToByte 後,出來的值是 113!?

想請問大大,我應該怎麼作才能確定問題的癥結,進而順利改寫到 C# 上?

function EncryptByte(b: byte): byte;
var
StartKey, KeyOffset: integer;
begin
StartKey := 1234;
KeyOffset := 6781;

Result := (b xor ((StartKey shr 8) KeyOffset)) 33;

ShowMessage(IntToStr((b xor ((StartKey shr 8) KeyOffset)) 33)); //這是我自己加上的,顯示 6898
ShowMessage(IntToStr(Result)); //這是我自己加上的,顯示 242
end;

pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-08-10 13:43:05 IP:218.163.xxx.xxx 未訂閱

byte只能儲存0..255 func很明顯傳超過255的整數啦...不然你把運算那行改成b 33看看,

這樣兩個showmessage結果就相同

結論就是func:byte改成func:integer.......回傳型態改成整數

------
星期一,二...無窮迴圈@@
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-10 13:43:15 IP:218.163.xxx.xxx 未訂閱

byte只能儲存0..255 func很明顯傳超過255的整數啦...不然你把運算那行改成b 33看看,

這樣兩個showmessage結果就相同

結論就是func:byte改成func:integer.......回傳型態改成整數

------
星期一,二...無窮迴圈@@
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-09-23 00:22:17 IP:219.134.xxx.xxx 未訂閱
byte 是 1 个 byte, Integer 是 4 个 byte.

那么,你拿一个 byte 类型的东西去和一个 4个 byte 类型的东西去做 xor,结果你还想得到一个 byte 的东西,我自己没写代码测试,我猜应该是得到一个 Integer 的4个 byte 中的最后一个。也就是你最后计算结果的那个 Integer 被截短了后,剩下的那个 byte



===================引 用 文 章===================

小弟要改寫公司前人留下的程式時發現下面這一個 Function,Function 中傳入的參數 Byte 值為 80,可是小弟在 Function 內加入兩道 ShowMessage 顯示 Function 的計算結果,忽然間發現,等號(=) 的兩邊值是不相等的,我臆測應該是 Result 型態是 Byte,而等號右邊計算出來的是 Integer,而 Delphi 自動轉換型別了~

問題是,目前是以 C# 改寫下面 Function 使用 Convert.ToByte 後,出來的值是 113!?

想請問大大,我應該怎麼作才能確定問題的癥結,進而順利改寫到 C# 上?

function EncryptByte(b: byte): byte;
var
StartKey, KeyOffset: integer;
begin
StartKey := 1234;
KeyOffset := 6781;

Result := (b xor ((StartKey shr 8) KeyOffset)) 33;

ShowMessage(IntToStr((b xor ((StartKey shr 8) KeyOffset)) 33)); //這是我自己加上的,顯示 6898
ShowMessage(IntToStr(Result)); //這是我自己加上的,顯示 242
end;

系統時間:2024-11-22 8:51:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!