|
|
2005/11/10 下午 02:54:56
char ss[9]; long Bit16=69; itoa(Bit16,ss,2); ss的結果是1011001 我想讓ss的值為01011001 也就是說為零的不想空白,假設今天Bit16=1,那ss應該是00000001,請問要怎麼才能做到呢?
|
|
|
|
2005/11/10 下午 03:59:43
解決了..OK..用sprintf 我好像常常自問自答,不過要是有遇到相同問題可以一起討論,還是我太笨了,沒人要理偶QQ
|
|
|
2005/11/10 下午 10:19:26
>char ss[9];
8 個空位不夠放 long. 正確的寫法是:
char ss[sizeof(unsigned long) * CHAR_BIT+1];
CHAR_BIT 需要 <limits.h>
>long Bit16=69;
負數的 binary representation 視系統而定. 應該用 unsigned long.
>itoa(Bit16,ss,2);
itoa() 不是一個標準的函式. 讓你自己想想不用 library function 該怎麼做.
>ss的結果是1011001 >我想讓ss的值為01011001 >也就是說為零的不想空白,假設今天Bit16=1,那ss應該是00000001,請問要怎麼才能做到呢?
可以預先把 'ss' 全設為 '0', 或轉換/儲存後把剩餘的位子設為 '0'.
|
|
|
|
2005/11/11 上午 09:37:34
> char ss[sizeof(unsigned long) * CHAR_BIT+1]; 請教這一行為什麼算出佔用大小後不是用除的而是用乘的? 謝謝
|
|
|
2005/11/11 上午 10:30:30
function _itoa() 會將輸入數字依據要求的進位表示法用字串表示出來,
這表示當用2進位表示法時,每個 bit 會用到一個 byte 儲存
所以用 function sizeof 算出 byte 大小之後 還需換算出 bit 總數
再根據 bit 總數分配最多可能使用到的 byte 容量.
|
|
|
2005/11/11 上午 10:32:10
sizeof(unsigned long) 是用來取出 unsinged long 的長度,單位為 byte 而 CHAR_BIT 是 char 所佔的 bit 數,一個 char 佔 1 byte 所以相乘的結果就是 unsigned long 所佔用的 bit 數 最後加 1 是為了放字串的結束字元 null
|
|
|
|
2005/11/11 上午 10:49:47
>long Bit16=69; >負數的 binary representation 視系統而定. 應該用 unsigned long. 所以會因為不同系統(例WIN98及WIN2000的不同)而不同囉?
>itoa(Bit16,ss,2); >itoa() 不是一個標準的函式. 讓你自己想想不用 library function 該怎麼做. 是轉十進制再轉二進制嗎?
>可以預先把 'ss' 全設為 '0', 或轉換/儲存後把剩餘的位子設為 '0'. char ss[9]={'0'}; 這樣寫對嗎?@@
|
|
|
|
2005/11/11 上午 10:51:29
講解得非常清楚謝謝各位
|
|
|
2005/11/11 下午 10:09:16
>>long Bit16=69; >>負數的 binary representation 視系統而定. 應該用 unsigned long. >所以會因為不同系統(例WIN98及WIN2000的不同)而不同囉?
Binary representation 跟硬件比較有關, 所以這裡的 '系統' 指的 是 processor architecture.
>>itoa(Bit16,ss,2); >>itoa() 不是一個標準的函式. 讓你自己想想不用 library function 該怎麼做. >是轉十進制再轉二進制嗎?
對 compiler 來說, 所有的數字都是用二進制來存. 所謂的八, 十, 或十六進制, 是為了方便 "人" 讀而輸出的型式.
給你一些提示:
你所要做的, 就是找出 unsigned long 裡, 每一個 bit 的值. 如果該 bit 為零, 就把 'ss' 裡相關的位子的字元設為 '0'. 如果該 bit 為壹, 就把 'ss' 裡相關的位子的字元設為 '1':
unsigned long +=========...=========+ | | | | | ... | 0 | 1 | +=========...=========+ | | ss ↓ ↓ +=========...=========+ | | | | | ... |‘0’|‘1’| +=========...=========+
>>可以預先把 'ss' 全設為 '0', 或轉換/儲存後把剩餘的位子設為 '0'. >char ss[9]={'0'}; >這樣寫對嗎?@@
不好意思, 我沒寫清楚. 應該是設為零. 數目 0 在 C 用字元的型式來寫是 '\0'.
所以應該是這樣: char ss[9] = {0};
在 C 裡, '{' 跟 '}' 是用來設 array 宣告時的初始值. 如果初始值的數目少過 array 的大小, 其餘的 elements 的會自動設為 0. 所以:
int iAry[10] = { 1 };
只會把 iAry[0] 設為 1, 其餘的 (iAry[1] 到 [9]) 全設為 0.
但因為 {} 裡不能空, 所以要放至少一個值.
|
|
|
|
|
|
|
|
| Visual C++ |
 |
|
| |
專家等級 |
評價 |
|
| |
一代宗師 |
10000 |
|
| |
曠世奇才 |
5000 |
|
| |
頂尖高手 |
3000 |
|
| |
卓越專家 |
1500 |
|
| |
優秀好手 |
750 |
|
|
|
|
|
|
|
|
|
|
|
|
Microsoft Internet Explorer
6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2013 程式設計俱樂部 http://www.programmer-club.com.tw/ |
|
|