[問題]十進制轉二進制 固定八位元..

看板C_and_CPP (C/C++)作者 (天地桑)時間16年前 (2010/01/02 00:09), 編輯推噓4(4035)
留言39則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 在設計一個輸入IP位址(十進制) 要轉至成binary 利用atoi && itoa 變成binary之後 前面若要補0 有什麼方法呢? 希望得到的正確結果: 有想過先strlen判斷個數,利用右移的指令,在將前頭補零 可是沒辦法實現.. 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) 補充說明: 抓下來的binary值為指標陣列 char *b[4] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.41.78.26

01/02 00:29, , 1F
變成字串了?? printf用 %08s 就可以自己補了....:)
01/02 00:29, 1F

01/02 00:30, , 2F
C++的話, cout 有一個功能是設定對齊位數與補足字元,
01/02 00:30, 2F

01/02 00:30, , 3F
只是我不會....orz
01/02 00:30, 3F

01/02 00:40, , 4F
!!!!真的假的 我試試看 感謝
01/02 00:40, 4F

01/02 01:08, , 5F
很謝謝!我現在才知道這招~不過我真正想達成的是在陣列裡W.
01/02 01:08, 5F

01/02 01:09, , 6F
頭補上零 變成八bit 在運算..該怎麼做呢 還懇請幫忙一下
01/02 01:09, 6F

01/02 01:29, , 7F
在二進位的前面bit補上零變成八位運算,這個好笑…
01/02 01:29, 7F

01/02 01:30, , 8F
很久沒有開年就看到那麼好笑的事了,以後看不到怎麼辦…
01/02 01:30, 8F

01/02 01:33, , 9F
好了,為防被罵,跟你講清楚:數字多少進位只有顯示出來
01/02 01:33, 9F

01/02 01:34, , 10F
有差別,補零也是一樣!你要讓他固定為8-bit最好的方法
01/02 01:34, 10F

01/02 01:34, , 11F
就是存到unsigned char裡面,這樣就一定是8-bit!
01/02 01:34, 11F

01/02 01:38, , 12F
的確XD 如果是搞成字串處裡的話, 想變成8個0/1的char
01/02 01:38, 12F

01/02 01:39, , 13F
string, 那就 把 printf 變成 sprintf 吧....:)
01/02 01:39, 13F

01/02 01:39, , 14F
但是, 那個 char *b[4] 我就不太懂是要怎麼用了@_@"
01/02 01:39, 14F

01/02 01:41, , 15F
話說, atoi是字串轉數字, itoa是數字轉字串, 為什麼會需
01/02 01:41, 15F

01/02 01:42, , 16F
要兩個一起用啊?? 而且原po說的binary我看起來只像是
01/02 01:42, 16F

01/02 01:42, , 17F
char array / string 而已....@_@"
01/02 01:42, 17F

01/02 01:42, , 18F
01/02 01:42, 18F

01/02 01:42, , 19F
orz!!!
01/02 01:42, 19F

01/02 01:42, , 20F
01/02 01:42, 20F

01/02 01:43, , 21F
好吧, 樓上你還是斷到了orz 而且我還沒對齊到....XDDD
01/02 01:43, 21F

01/02 01:47, , 22F
被騙了吧XDDDD
01/02 01:47, 22F

01/02 02:02, , 23F
嗯..位元前面零這個我懂 只是我要做IP跟network mask的判
01/02 02:02, 23F

01/02 02:05, , 24F
斷,所以需要將設定其他位元(第八bit開始..遞減)
01/02 02:05, 24F

01/02 02:08, , 25F
To V大 Input是十進制的ip 想利用itoa變成二進制
01/02 02:08, 25F

01/02 02:12, , 26F
如果coding的想法有可能有錯 還請多包涵吶
01/02 02:12, 26F

01/02 02:23, , 27F
那個~~請再思考一下M大說的, 一個數是幾進制的, 只和它
01/02 02:23, 27F

01/02 02:24, , 28F
呈現的樣子有不同, 本質是一樣的, 0xFF, 255, 11111111b
01/02 02:24, 28F

01/02 02:25, , 29F
上面幾個數對電腦來說是一模一樣的. 然後, itoa是把數轉
01/02 02:25, 29F

01/02 02:25, , 30F
嗯嗯!!我觀念不太清楚 謝謝M大跟V大 的提醒
01/02 02:25, 30F

01/02 02:25, , 31F
程字串, 原本一個數255(或0xFF), 會被轉成"255"(字串)
01/02 02:25, 31F

01/02 02:26, , 32F
變成字串之後你更沒辦法做subnet mask之類的運算....
01/02 02:26, 32F

01/02 02:28, , 33F
比如, 140要和255做AND運算, 用二進位來想是我們寫計算
01/02 02:28, 33F

01/02 02:28, , 34F
嗯嗯~~好的!!我再來再一下程式
01/02 02:28, 34F

01/02 02:28, , 35F
過程會比較簡單, 實際上程式就是做 140 & 255 的計算,
01/02 02:28, 35F

01/02 02:29, , 36F
(你喜歡用 140 & 0xFF 也行), 所以我不太清楚你是否需要
01/02 02:29, 36F

01/02 02:30, , 37F
itoa; C的字串輸出好像也沒有自動轉成2進位的方式, 所以
01/02 02:30, 37F

01/02 02:31, , 38F
你就算想把它轉成 11111111 這個型式, 還是得自己處理:)
01/02 02:31, 38F

01/02 03:19, , 39F
嗯嗯!!謝謝指點:D
01/02 03:19, 39F
文章代碼(AID): #1BFXuaCu (C_and_CPP)
文章代碼(AID): #1BFXuaCu (C_and_CPP)