二進位轉十六進位的方法 |
答題得分者是:aftcast
|
jackyqoo
一般會員 發表:3 回覆:6 積分:1 註冊:2015-08-05 發送簡訊給我 |
各位大大好,小弟不才,連基本的進位轉換都不會
有試過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 發送簡訊給我 |
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 發送簡訊給我 |
謝謝副站長的教導
但 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 發送簡訊給我 |
我只有做出結果,但解釋還是要仰賴蕭大俠解答。
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 發送簡訊給我 |
您好
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
我想可能大家用語不太一樣。 我轉出來的,的確是 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 發送簡訊給我 |
大大你好,元旦快樂!!
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 發送簡訊給我 |
你好,因近來我忙於一個專案,很趕,所以就隨便寫不完善的給你參考。請自己再修修改改吧!
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 發送簡訊給我 |
謝謝大大給的資源
不好意思麻煩你了 ===================引 用 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;
------
學無止境 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |