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

一個int轉十六進位String的小bug

答題得分者是:jow
dan500
一般會員


發表:4
回覆:3
積分:1
註冊:2007-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-21 22:48:16 IP:203.73.xxx.xxx 訂閱
我的程式會抓許多char回來並需要用十六進位表示其值
例如....抓到某個char,其值為 00000010....則我希望印出02

但當我每次只要抓到第一個Bit(MSB)是1時...就會出現怪現象
他會在正確的值前印上六個F

例:
char info[6];
info[0] = 0x02;
info[1] = 0xA0;
info[2] = 0x81;
info[3] = 0xB3;
info[4] = 0xFF;
info[5] = 0x80;
AnsiString str;
for (int i=0; i<6; i )
{
str = IntToHex(info[i],2);
str = " ";
}
Form1->Memo1->Text = str;


則會印出 02 FFFFFFA0 FFFFFF81 FFFFFFB3 FFFFFFFF FFFFFF80

請問這是為什麼嗎?
謝謝
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-21 23:03:22 IP:123.193.xxx.xxx 訂閱
unsigned char info[6];

str = IntToHex((unsigned char)info[i],2);

編輯記錄
jow 重新編輯於 2007-11-21 23:04:28, 註解 無‧
dan500
一般會員


發表:4
回覆:3
積分:1
註冊:2007-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-21 23:08:32 IP:203.73.xxx.xxx 訂閱
嗯嗯   真的耶

可以請問一下原因嗎?
那六個F...是怎麼回事...

雖然依稀感覺跟MSB那個1有關係....
是正副號問題嗎?
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-21 23:26:16 IP:123.193.xxx.xxx 訂閱
MSB - Most Significant Bit, 
在數值為 signed 時, 1表示負數.

char 的範圍 -128~0~127....

===================引 用 dan500 文 章===================
嗯嗯 真的耶

可以請問一下原因嗎?
那六個F...是怎麼回事...

雖然依稀感覺跟MSB那個1有關係....
是正副號問題嗎?
編輯記錄
jow 重新編輯於 2007-11-21 23:26:53, 註解 無‧
dan500
一般會員


發表:4
回覆:3
積分:1
註冊:2007-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-21 23:58:04 IP:203.73.xxx.xxx 訂閱

那...為什麼負數轉十六進位會產生六個F呢
像...0xA0....值應該是-96
將他轉成十六進位......嗯.....應該是多少呢? 還是0xA0?

那六個F只是提醒我們他原本是負的?
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-22 00:06:21 IP:123.193.xxx.xxx 訂閱
on-line help of IntToHex

VCL Reference

IntToHex
-------------------------------------------------------------
Returns the hex representation of an integer.

Unit
SysUtils
Category
numeric formatting routines
extern PACKAGE AnsiString __fastcall IntToHex(int Value, int Digits);
extern PACKAGE AnsiString __fastcall IntToHex(__int64 Value, int Digits);
Description
IntToHex converts a number into a string containing the number's hexadecimal (base 16) representation. Value is the number to convert. Digits indicates the minimum number of hexadecimal digits to return.
系統時間:2024-07-02 22:17:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!