如何將 AnsiString 轉換成 16 進制的值 |
尚未結案
|
stree
一般會員 發表:9 回覆:3 積分:2 註冊:2004-08-12 發送簡訊給我 |
|
limeca
中階會員 發表:2 回覆:74 積分:60 註冊:2005-05-11 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
powmien
初階會員 發表:27 回覆:80 積分:41 註冊:2004-10-20 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
to stree,
不知道您的問題是否解決了,也許各位大大都把問題想得太複雜,不知是否合您用 個人猜想,
< class="code">
AnsiString bb;
byte test;
test=Edit1->Text.ToInt(); // 使用者輸入 10 進制的值, 假設是輸入 16
bb = IntToHex(test,2); // 在此 bb 會變成 10
int aa = StrToInt(bb); // 在此如果直接使用 StrToInt() 則 aa 變成 10, 而不是 16
int realvalue = StrToInt(String("0x") bb); // 正解
只需要在 16 進制的字串前加 "0x" 即可由 StrToInt() 轉回到正確的數
值,因為 StrToInt() 並不知道您給的字串是什麼進制,特別加個 "0x" 開
頭,StrToInt() 就可以自動幫您判斷以 16 進制去解讀輸入字串,如果沒加
"0x" 則以 10 進制去解讀,如果解讀有問題,可能會變成 0 或是發 exception。 C# 初學者請多指教 < href="http://free.greenworld.com.tw/~dllee/" target="blank">吃軟也吃硬 dllee.ktop.com.tw dllee's sharespace Beckhoff Fieldbus 發表人 - dllee 於 2005/09/23 12:39:23
------
http://www.ViewMove.com |
stree
一般會員 發表:9 回覆:3 積分:2 註冊:2004-08-12 發送簡訊給我 |
if(test == 1) getvalue=0x01; else if(Edit1->Text == 2) getvalue=0x02; else if(Edit1->Text == 3) getvalue=0x03; else if(Edit1->Text == 4) getvalue=0x04; else if(Edit1->Text == 5) getvalue=0x05; else if(Edit1->Text == 6) getvalue=0x06; else if(Edit1->Text == 7) getvalue=0x07; else if(Edit1->Text == 8) getvalue=0x08; else if(Edit1->Text == 9) getvalue=0x09; else if(Edit1->Text == 10) getvalue=0x0A; else if(Edit1->Text == 11) getvalue=0x0B; else if(Edit1->Text == 12) getvalue=0x0C; else if(Edit1->Text == 13) getvalue=0x0D; else if(Edit1->Text == 14) getvalue=0x0E; else if(Edit1->Text == 15) getvalue=0x0F; else if(Edit1->Text == 16) getvalue=0x10; else if(Edit1->Text == 17) getvalue=0x11; else if(Edit1->Text == 18) getvalue=0x12; else if(Edit1->Text == 19) getvalue=0x13; else if(Edit1->Text == 20) getvalue=0x14; else if(Edit1->Text == 21) getvalue=0x15; else if(Edit1->Text == 22) getvalue=0x16; else if(Edit1->Text == 23) getvalue=0x17; else if(Edit1->Text == 24) getvalue=0x18; else if(Edit1->Text == 25) getvalue=0x19; else if(Edit1->Text == 26) getvalue=0x1A; else if(Edit1->Text == 27) getvalue=0x1B; else if(Edit1->Text == 28) getvalue=0x1C; else if(Edit1->Text == 29) getvalue=0x1D; else if(Edit1->Text == 30) getvalue=0x1E; else if(Edit1->Text == 31) getvalue=0x1F; else if(Edit1->Text == 32) getvalue=0x20; else if(Edit1->Text == 33) getvalue=0x21; else if(Edit1->Text == 34) getvalue=0x22; else if(Edit1->Text == 35) getvalue=0x23; else if(Edit1->Text == 36) getvalue=0x24; else if(Edit1->Text == 37) getvalue=0x25; else if(Edit1->Text == 38) getvalue=0x26; else if(Edit1->Text == 39) getvalue=0x27; else if(Edit1->Text == 40) getvalue=0x28; else if(Edit1->Text == 41) getvalue=0x29; else if(Edit1->Text == 42) getvalue=0x2A; else if(Edit1->Text == 43) getvalue=0x2B; else if(Edit1->Text == 44) getvalue=0x2C; else if(Edit1->Text == 45) getvalue=0x2D; else if(Edit1->Text == 46) getvalue=0x2E; else if(Edit1->Text == 47) getvalue=0x2F; else if(Edit1->Text == 48) getvalue=0x30; else if(Edit1->Text == 49) getvalue=0x31; else if(Edit1->Text == 50) getvalue=0x32; else if(Edit1->Text == 51) getvalue=0x33; else if(Edit1->Text == 52) getvalue=0x34; else if(Edit1->Text == 53) getvalue=0x35; else if(Edit1->Text == 54) getvalue=0x36; else if(Edit1->Text == 55) getvalue=0x37; else if(Edit1->Text == 56) getvalue=0x38; else if(Edit1->Text == 57) getvalue=0x39; else if(Edit1->Text == 58) getvalue=0x3A; else if(Edit1->Text == 59) getvalue=0x3B; else if(Edit1->Text == 60) getvalue=0x3C; else if(Edit1->Text == 61) getvalue=0x3D; else if(Edit1->Text == 62) getvalue=0x3E; else if(Edit1->Text == 63) getvalue=0x3F; else if(Edit1->Text == 64) getvalue=0x40; else if(Edit1->Text == 65) getvalue=0x41; else if(Edit1->Text == 66) getvalue=0x42; else if(Edit1->Text == 67) getvalue=0x43; else if(Edit1->Text == 68) getvalue=0x44; else if(Edit1->Text == 69) getvalue=0x45; else if(Edit1->Text == 70) getvalue=0x46; else if(Edit1->Text == 71) getvalue=0x47; else if(Edit1->Text == 72) getvalue=0x48; else if(Edit1->Text == 73) getvalue=0x49; else if(Edit1->Text == 74) getvalue=0x4A; else if(Edit1->Text == 75) getvalue=0x4B; else if(Edit1->Text == 76) getvalue=0x4C; else if(Edit1->Text == 77) getvalue=0x4D; else if(Edit1->Text == 78) getvalue=0x4E; else if(Edit1->Text == 79) getvalue=0x4F; else if(Edit1->Text == 80) getvalue=0x50; else if(Edit1->Text == 81) getvalue=0x51; else if(Edit1->Text == 82) getvalue=0x52; else if(Edit1->Text == 83) getvalue=0x53; else if(Edit1->Text == 84) getvalue=0x54; else if(Edit1->Text == 85) getvalue=0x55; else if(Edit1->Text == 86) getvalue=0x56; else if(Edit1->Text == 87) getvalue=0x57; else if(Edit1->Text == 88) getvalue=0x58; else if(Edit1->Text == 89) getvalue=0x59; else if(Edit1->Text == 90) getvalue=0x5A; else if(Edit1->Text == 91) getvalue=0x5B; else if(Edit1->Text == 92) getvalue=0x5C; else if(Edit1->Text == 93) getvalue=0x5D; else if(Edit1->Text == 94) getvalue=0x5E; else if(Edit1->Text == 95) getvalue=0x5F; else if(Edit1->Text == 96) getvalue=0x60; else if(Edit1->Text == 97) getvalue=0x61; else if(Edit1->Text == 98) getvalue=0x62; else if(Edit1->Text == 99) getvalue=0x63; else if(Edit1->Text == 100) getvalue=0x64;問題是解了,但是小弟用的是上面的那個笨法,小弟之所以要這樣是因為,要把這個值以,並列傳輸的法式去傳給它,而接收端它只收16進制的值,所以小弟才不得不這樣做。 |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
如果是這樣,那就是其他大大們的說明您沒有看懂了
試試
> > < href="http://free.greenworld.com.tw/~dllee/" target="blank">吃軟也吃硬 dllee.ktop.com.tw dllee's sharespace Beckhoff Fieldbus 發表人 - dllee 於 2005/09/23 14:54:39
------
http://www.ViewMove.com |
stree
一般會員 發表:9 回覆:3 積分:2 註冊:2004-08-12 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
初學者對於不同的進制總是會感到困擾的,因為平常慣用的就是 10 進制,
其他的進制不常用總是覺得怪怪的,但其實,我們平常也用
12 進制,如:1打=12個, 英制長度如:1呎=12吋
24 進制,如:1天=24小時
60 進制,如:1小時=60分鐘, 1分鐘=60秒
這些常用的非10進制,因為從小就用,也不會特別覺得怪,(當然,像我現在
要教我的小朋友這些非10進制就要花些功夫了) 以下是以前上課用的講義,請參考:
< class="code">
※※※※※※※※※※※※ 第 八 週 ※※※※※※※※※※※※
※※※※※※※※※※※※ 講 義 內 容 ※※※※※※※※※※※※ ■ 第十八章 數字系統與二進碼 電腦只懂 0 與 1 這兩個數值,所有存在硬碟的東西,都是用一堆 0 與 1 來存的,
如:你的電腦作業、圖形資料、文字資料、應用程式、作業系統等等。但是我們所
熟悉的數值並不是只有 0 與 1 ,還有 2、3、4、...、9,而且是十進位的。
什麼是十進位(Decimal)? 十進位有 0,1,2,3,4,5,6,7,8,9 等數值, 9 加 1 會
等於 十,而這個十已經不是 0 ~ 9 所能表示了,所以要進一位,也就是 10 。
同理,什麼是二進位(Binary)? 二進位有 0,1 等數值, 1 加 1 會等於 二,
而這個二已經不是 0 ~ 1 所能表示了,所以要進一位,也就是 ( 10 )b 。
什麼是八進位(Octal)? 八進位有 0,1,2,3,4,5,6,7 等數值, 7 加 1 會等於 八,
而這個八已經不是 0 ~ 7 所能表示了,所以要進一位,也就是 ( 10 )o 。
什麼是十六進位(Hexadecimal)? 十六進位有 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
等數值, F 加 1 會等於 十六,而這個十六已經不是 0 ~ F 所能表示了,
所以要進一位,也就是 ( 10 )h 。 ◎ 數字系統(Number System) 十進位系統,是由十個數元(digit),即 0,1,2,3,4,5,6,7,8,9 為基底(Base)的一
套系統。任何一個數字只能用這十個數元來表示,我們也可以說,十進位數字系統
是一套以十為基底的數字系統。同理:
K進位系統,是由K個數元,即 0,1,2,...,K-1 。在K進位的數字系統中,其
基底為K,則該系統的任何一個正數(不管是整數或是實數)都可以用一個多項式N
來表示:
p-1 1 0 -1 -2 -q
N = A K ... A K A K A K A K ... A K
p-1 1 0 -1 -2 -q p-1 i
= Σ A K , -q ≦ i ≦ p-1 , A 屬於 {0,1,2,...,K-1}
i=-q i i 這個以K為基底的數字N,通常寫成 ( p 是整數的位數,q 是小數的位數 ) N = ( A A ~ A A . A A ~ A )
k p-1 p-2 1 0 -1 -2 -q k 例如: 十進位的 567.89 , 567.89 在整數部分有 3 位,小數部分有 2 位: 2 1 0 -1 -2
567.89 = 5*10 6*10 7*10 8*10 9*10 下表,是將十進位的 0~16 的數值,分別用十進位、二進位、八進位、十六進位
來表示:
┌────┬────┬────┬────┐
│ 十進位 │ 二進位 │ 八進位 │十六進位│
│ (Dec)d │ (Bin)b │ (Oct)o │ (Hex)h │
├────┼────┼────┼────┤
│ 0 │ 0 │ 0 │ 0 │
│ 1 │ 1 │ 1 │ 1 │
│ 2 │ 10 │ 2 │ 2 │
│ 3 │ 11 │ 3 │ 3 │
│ 4 │ 100 │ 4 │ 4 │
│ 5 │ 101 │ 5 │ 5 │
│ 6 │ 110 │ 6 │ 6 │
│ 7 │ 111 │ 7 │ 7 │
│ 8 │ 1000 │ 10 │ 8 │
│ 9 │ 1001 │ 11 │ 9 │
│ 10 │ 1010 │ 12 │ A │
│ 11 │ 1011 │ 13 │ B │
│ 12 │ 1100 │ 14 │ C │
│ 13 │ 1101 │ 15 │ D │
│ 14 │ 1110 │ 16 │ E │
│ 15 │ 1111 │ 17 │ F │
│ 16 │ 10000 │ 20 │ 10 │
└────┴────┴────┴────┘ ◎ 將以下數值表示成十進位數字: ○ ( 83.452 )d
1 0 -1 -2 -3
( 83.452 )d = 8*10 3*10 4*10 5*10 2*10 = 80 3 0.4 0.05 0.002 = 83.452 ○ ( 11010.011 )b
4 3 2 1 0 -1 -2 -3
( 11010.011 )b = 1*2 1*2 0*2 1*2 0*2 0*2 1*2 1*2 = 16 8 0 2 0 0 0.25 0.125 = 26.357 ○ ( 435.24 )o
2 1 0 -1 -2
( 435.24 )o = 4*8 3*8 5*8 2*8 4*8 = 256 24 5 0.25 0.0625 = 285.3125 ○ ( 9BE.C8 )h
2 1 0 -1 -2
( 9BE.C8 )h = 9*16 11*16 14*16 12*16 8*16 = 2304 176 14 0.75 0.03125 = 2494.78125
如果想要把它搞懂,可以試試自己作 11 進制, 7 進制, 3 進制等等奇怪的進
制,如果可以自己把數值在 10->11->7->3 進制之間轉換,那各式不同的進制
都難不到您了 在 > > < href="http://free.greenworld.com.tw/~dllee/" target="blank">吃軟也吃硬 dllee.ktop.com.tw dllee's sharespace Beckhoff Fieldbus
------
http://www.ViewMove.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |