linux
下,需要將整數轉化為二進位制,很自然想到itoa
,發現這函式竟然編譯不通過。標準庫中貌似有這個實現,不明白了~ 網上參考了帖子,下面實現**:
感覺這方法有點費腦,不是很直觀。
取模的方法一般都是從低位到高位,所以儲存的字串結果一般會跟需要的結果相反,需要倒轉,要解決這個問題,可以從字串陣列後面開始往前儲存。
#include
#include
#define buf_len 64
char
*i2bin
(unsigned
long
long v,
char
* buf,
int len)
char
* dst = buf + len -1;
*dst =
'\0'
;while
(v)memcpy
(buf, dst, buf + len - dst)
;return buf;
}int
main()
;char
* res =
i2bin
(v, buf, buf_len)
; res ?
printf
("data: %s, len: %lu\n"
,i2bin
(v, buf, buf_len)
,strlen
(buf)):
printf
("fail\n");
}
參考 redis sds.c 原始碼,把下面原始碼的 10 改為 2 即可。
int
sdsll2str
(char
*s,long
long value)
while
(v);
if(value <0)
*p++
='-'
;/* compute length and add null term. */
l = p - s;
*p =
'\0'
;/* reverse the string. */
p--;while
(s < p)
return l;
}
? 文章**《linux 下實現 itoa 轉二進位制》
二進位制如何轉十進位制,十進位制如何轉二進位制
學計算機的朋友剛開始學習時都要接觸進製之間的轉換,二進位制 十進位制 八進位制 十六進製制等,這個是很枯燥的,轉來轉去就轉矇圈了,別蒙別蒙,今天咱們乙個乙個搞定,看看二進位制和十進位制之間如何相互轉換的。轉成二進位制主要有以下幾種 正整數轉二進位制,負整數轉二進位制,小數轉二進位制 1 正整數轉成二...
二進位制如何轉十進位制,十進位制如何轉二進位制
二進位制如何轉十進位制,十進位制如何轉二進位制 1 正整數轉成二進位制。要點一定一定要記住哈 除二取餘,然後倒序排列,高位補零。也就是說,將正的十進位制數除以二,得到的商再除以二,依次類推知道商為零或一時為止,然後在旁邊標出各步的餘數,最後倒著寫出來,高位補零就ok咧。哎呀,還是舉說明吧,比如42轉...
Python二進位制轉十進位制演算法 十進轉二進位制演算法
二進位制數轉換成十進位制數 二進位制數從右向左每位數乘以2的次方 從0開始,從右向左依次 1 然後相加求和即可 如 0101轉成十進位制為 1 20 0 21 1 22 0 23 1 0 4 0 5 演算法實現 coding utf 8 b raw input 請輸入乙個二進位制數 decode u...