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

二進位轉十六進位的方法

答題得分者是:aftcast
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-08-13 11:30:18 IP:120.105.xxx.xxx 訂閱
各位大大好,小弟不才,連基本的進位轉換都不會
有試過BinToHex但無法字串直接輸出?請問有其他方法嗎?還是需再轉換才能輸出
之後也有試過其他大大方法。
http://www.borlandtalk.com/hextobin-and-bintohex-vt12599.html
AnsiString asText = Edit1->Text;
int BufSize = asText.Length() / 4;

char *Buffer = new char[BufSize 1];
Buffer[BufSize] = ' ';

BinToHex(Text.c_str(), Buffer, BufSize);
Edit2->Text = AnsiString(Buffer, BufSize);

delete[] Buffer;
不管Edit1->Text是多少,Edit2->Text總是466F7
麻煩各位大大了。謝謝

------
學無止境
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-08-16 12:46:02 IP:36.229.xxx.xxx 訂閱
int BufSize = asText.Length()  0; 或者把這行註解掉也ok。因為你最後用了AnsiString(char*, len)。若你用的是AnsiString(char*)這個建構式,那麼就一定要有這一行!!!
BinToHex(asText.c_str(), Buffer, BufSize);

===================引 用 jackyqoo 文 章=================== 各位大大好,小弟不才,連基本的進位轉換都不會
有試過BinToHex但無法字串直接輸出?請問有其他方法嗎?還是需再轉換才能輸出
之後也有試過其他大大方法。
http://www.borlandtalk.com/hextobin-and-bintohex-vt12599.html
AnsiString asText = Edit1->Text;
int BufSize = asText.Length() / 4;

char *Buffer = new char[BufSize 1];
Buffer[BufSize] = ' ';

BinToHex(Text.c_str(), Buffer, BufSize);
Edit2->Text = AnsiString(Buffer, BufSize);

delete[] Buffer;
不管Edit1->Text是多少,Edit2->Text總是466F7
麻煩各位大大了。謝謝

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-08-18 09:08:10 IP:120.105.xxx.xxx 訂閱
謝謝副站長的教導 
但 int BufSize = asText.Length() *2;

Buffer[BufSize] = asText.c_str(), Buffer, BufSize);

===================引 用 jackyqoo 文 章=================== 各位大大好,小弟不才,連基本的進位轉換都不會
有試過BinToHex但無法字串直接輸出?請問有其他方法嗎?還是需再轉換才能輸出
之後也有試過其他大大方法。
http://www.borlandtalk.com/hextobin-and-bintohex-vt12599.html
AnsiString asText = Edit1->Text;
int BufSize = asText.Length() / 4;

char *Buffer = new char[BufSize 1];
Buffer[BufSize] = ' ';

BinToHex(Text.c_str(), Buffer, BufSize);
Edit2->Text = AnsiString(Buffer, BufSize);

delete[] Buffer;
不管Edit1->Text是多少,Edit2->Text總是466F7
麻煩各位大大了。謝謝

------
學無止境
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-08-18 11:36:49 IP:59.120.xxx.xxx 訂閱
我只有做出結果,但解釋還是要仰賴蕭大俠解答。

CB 2009 後的 Size 一直和我想的不一樣,所以我無法答訴你為什麼會有這樣的結果。

[code cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s1 = edtHex->Text;
int i = StrToInt(UnicodeString("$") s1);
edtBin->Text = IntToStr(i);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char Text[255];
char buffer[10]={'A','B','C','D','E','F','G','H','I','J'};
BinToHex( buffer, Text, sizeof( buffer ) );
edtHex->Text = String(Text, sizeof( Text ));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
String asText = edtBin->Text;

String Buffer;
Buffer.SetLength(asText.Length());

BinToHex(asText.c_str(), Buffer.c_str(), Buffer.Length());
edtHex->Text = Buffer;
}
[/code]
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-08-18 12:06:10 IP:122.146.xxx.xxx 訂閱
您好

aftcast站務副站長,已有明顯提示了使用了黑體 字體放大,不知是否有注意到

注意兩點:

1. int BufSize = asText.Length() asText.c_str(), Buffer, BufSize);

尤其是第2點,您的程式是:
BinToHex(Text.c_str(), Buffer, BufSize);

您有這個Text的變數嗎?


已下是程式碼:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString asText = Edit1->Text;

int BufSize = asText.Length() * 2;

char *Buffer = new char[BufSize 1];

BinToHex(asText.c_str(), Buffer, BufSize);

Edit2->Text = AnsiString(Buffer, BufSize);

delete[] Buffer;
}


===================引 用 jackyqoo 文 章=================== 各位大大好,小弟不才,連基本的進位轉換都不會
有試過BinToHex但無法字串直接輸出?請問有其他方法嗎?還是需再轉換才能輸出
之後也有試過其他大大方法。
http://www.borlandtalk.com/hextobin-and-bintohex-vt12599.html
AnsiString asText = Edit1->Text;
int BufSize = asText.Length() / 4;

char *Buffer = new char[BufSize 1];
Buffer[BufSize] = ' ';

BinToHex(Text.c_str(), Buffer, BufSize);
Edit2->Text = AnsiString(Buffer, BufSize);

delete[] Buffer;
不管Edit1->Text是多少,Edit2->Text總是466F7
麻煩各位大大了。謝謝

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-08-18 16:34:47 IP:59.125.xxx.xxx 訂閱
HELLO,

原則上,我寫的那樣應該是正確的。至於你的程式會停止… 那應該是別的原因… 你透過 RS232 吧? 若是…那問題變成了另一個 RS232 或是 socket block的問題上了。
你可以在 edit2 下一行中斷。看是否正常。或是單純開一個新專案,然後只寫那幾行程式碼就好。理當不會當吧?!

我試了一下是沒有當!

===================引 用 jackyqoo 文 章===================
謝謝副站長的教導
但 int BufSize = asText.Length() *2;
會導致程式停止並跳出而無法執行
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-08-19 01:50:47 IP:36.229.xxx.xxx 訂閱
hello,sorry,我記錯 api的參數意思了!

extern PACKAGE void __fastcall BinToHex(char * Buffer, char * Text, int BufSize)/* overload */;
其中的 bufsize 是 第一個參數的大小,不是指第二個參數。 (我記錯了!)

void __fastcall TForm25::_btn1Click(TObject *Sender) // 這樣 ok
{
AnsiString asText = this->_edt1->Text;
int aTextLen = asText.Length();
int BufSize = aTextLen *2;

char *Buffer = new char[BufSize];

BinToHex(asText.c_str(), Buffer, aTextLen);

_edt2->Text = AnsiString(Buffer,BufSize); //注意這裡的 一行

delete[] Buffer;
}
//---------------------------------------------------------------------------
void __fastcall TForm25::_btn2Click(TObject *Sender) // 這樣也ok
{
AnsiString asText = this->_edt1->Text;
int aTextLen = asText.Length();
int BufSize = aTextLen *2 1; // 有加 1

char *Buffer = new char[BufSize];

Buffer[BufSize] = 0; // 多這行

BinToHex(asText.c_str(), Buffer, aTextLen);

_edt2->Text = AnsiString(Buffer); //注意這裡的 一行

delete[] Buffer;
}
//---------------------------------------------------------------------------
===================引 用 jackyqoo 文 章=================== 各位大大好,小弟不才,連基本的進位轉換都不會
有試過BinToHex但無法字串直接輸出?請問有其他方法嗎?還是需再轉換才能輸出
之後也有試過其他大大方法。
http://www.borlandtalk.com/hextobin-and-bintohex-vt12599.html
AnsiString asText = Edit1->Text;
int BufSize = asText.Length() / 4;

char *Buffer = new char[BufSize 1];
Buffer[BufSize] = ' ';

BinToHex(Text.c_str(), Buffer, BufSize);
Edit2->Text = AnsiString(Buffer, BufSize);

delete[] Buffer;
不管Edit1->Text是多少,Edit2->Text總是466F7
麻煩各位大大了。謝謝

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-12-31 13:51:51 IP:120.105.xxx.xxx 訂閱
aftcast大大您好 

這樣轉出來是ASCII,

再次請問如何變16進制
===================引 用 aftcast 文 章===================
hello,sorry,我記錯 api的參數意思了!

extern PACKAGE void __fastcall BinToHex(char * Buffer, char * Text, int BufSize)/* overload */;
其中的 bufsize 是 第一個參數的大小,不是指第二個參數。 (我記錯了!)

void __fastcall TForm25::_btn1Click(TObject *Sender) // 這樣 ok
{
AnsiString asText = this->_edt1->Text;
int aTextLen = asText.Length();
int BufSize = aTextLen *2;

char *Buffer = new char[BufSize];

BinToHex(asText.c_str(), Buffer, aTextLen);

_edt2->Text = AnsiString(Buffer,BufSize); //注意這裡的 一行

delete[] Buffer;
}
//---------------------------------------------------------------------------
void __fastcall TForm25::_btn2Click(TObject *Sender) // 這樣也ok
{
AnsiString asText = this->_edt1->Text;
int aTextLen = asText.Length();
int BufSize = aTextLen *2 1; // 有加 1

char *Buffer = new char[BufSize];

Buffer[BufSize] = 0; // 多這行

BinToHex(asText.c_str(), Buffer, aTextLen);

_edt2->Text = AnsiString(Buffer); //注意這裡的 一行

delete[] Buffer;
}
//---------------------------------------------------------------------------

------
學無止境
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-12-31 16:34:32 IP:59.125.xxx.xxx 訂閱
我想可能大家用語不太一樣。 我轉出來的,的確是 16 進位 (字串)。

你直接給個例子,比如 input 什麼東西,然後 output 出來期望是什麼結果。這樣比較好確認與溝通。

===================引 用 jackyqoo 文 章===================
aftcast大大您好

這樣轉出來是ASCII,

再次請問如何變16進制
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2016-01-01 12:32:41 IP:42.77.xxx.xxx 訂閱
大大你好,元旦快樂!! Input=0000000000000000(16個0)至1111111111111111(16個1)    Output=0000至FFFF    麻煩大大了,謝謝。    
===================引 用 aftcast 文 章===================
我想可能大家用語不太一樣。 我轉出來的,的確是 16 進位 (字串)。

你直接給個例子,比如 input 什麼東西,然後 output 出來期望是什麼結果。這樣比較好確認與溝通。

===================引 用 jackyqoo 文 章===================
aftcast大大您好

這樣轉出來是ASCII,

再次請問如何變16進制
------
學無止境
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2016-01-04 00:07:10 IP:36.229.xxx.xxx 訂閱
你好,因近來我忙於一個專案,很趕,所以就隨便寫不完善的給你參考。請自己再修修改改吧!
edt1 輸入 1111 則 edt2會輸出 0F ,如果要控制輸出位數,請參考 IntToHex的第二個參數,調整一下即可。

AnsiString binStr = this->_edt1->Text;
char *p = binStr.c_str();
int dec = 0;
while (*p) {
if (*p == '1') {
dec = dec *2 1;
}
else if (*p == '0') {
dec *= 2;
} else {
ShowMessage("錯誤!字串含非1或0的值");
}
p ;
}

AnsiString hexStr = IntToHex(dec,2);
this->_edt2->Text = hexStr;


===================引 用 jackyqoo 文 章===================
大大你好,元旦快樂!! Input=0000000000000000(16個0)至1111111111111111(16個1) Output=0000至FFFF 麻煩大大了,謝謝。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#12 引用回覆 回覆 發表時間:2016-01-04 00:21:39 IP:125.224.xxx.xxx 訂閱
謝謝大大給的資源
不好意思麻煩你了
===================引 用 aftcast 文 章===================
你好,因近來我忙於一個專案,很趕,所以就隨便寫不完善的給你參考。請自己再修修改改吧!
edt1 輸入 1111 則 edt2會輸出 0F ,如果要控制輸出位數,請參考 IntToHex的第二個參數,調整一下即可。

AnsiString binStr = this->_edt1->Text;
char *p = binStr.c_str();
int dec = 0;
while (*p) {
if (*p == '1') {
dec = dec *2 1;
}
else if (*p == '0') {
dec *= 2;
} else {
ShowMessage("錯誤!字串含非1或0的值");
}
p ;
}

AnsiString hexStr = IntToHex(dec,2);
this->_edt2->Text = hexStr;



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