c語言中如何實(shí)現(xiàn)十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示?相信不少小伙伴們都被這個(gè)難題困擾過,那么我們現(xiàn)在將帶著這個(gè)疑問去看看c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實(shí)現(xiàn)方法吧。
?
//輸出格式: hex2bin 5e.
//得到: 0101 1110
//======================================
#include <stdio.h>
#include <limits.h>
char *bitstr(char *, void const *, size_t);
int main(int argc, char **argv)
{
?? unsigned char value;
?? char *pointer;
?? char ebits[CHAR_BIT * sizeof value + 1];
??
?? value = 0;
?? for (pointer = argv[1]; *pointer; ++pointer) {
???? value <<= 4;
???? switch (*pointer) {
??????? case 'a':
??????? case 'A':
??????????? value += 0xa;
??????????? break;
??????? case 'b':
??????? case 'B':
??????????? value += 0xb;
??????????? break;
??????? case 'c':
??????? case 'C':
??????????? value += 0xc;
??????????? break;
??????? case 'd':
??????? case 'D':
??????????? value += 0xd;
??????????? break;
??????? case 'e':
??????? case 'E':
??????????? value += 0xe;
??????????? break;
??????? case 'f':
??????? case 'F':
??????????? value += 0xf;
??????????? break;
??????? default:
??????????? value += *pointer - '0';
??????????? break;
? }
?? }
?? bitstr(ebits, &value, sizeof value);
?? printf("The binary representation of 0x%s is ", argv[1]);
?? for (pointer = ebits, value = 0; *pointer != '/0'; ++pointer) {
??? if(value > 3) {
?????????? value = 0;
???? putchar(' ');
?????????? putchar(*pointer);
??? }
??? else {
???? value++;
??????? putchar(*pointer);
??? }
?? }
??
?? return 0;
}
char *bitstr(char *str, const void *obj, size_t n)
{
?? unsigned char mask;
?? const unsigned char *byte = obj;
?? char *const ptr = str;
?? while (n--) {
????? mask = ((unsigned char)-1 >> 1) + 1;
????? do {
???????? *str++ = (char)(mask & byte[n] ? '1' : '0');
???????? mask >>= 1;
????? } while (mask);
?? }
?? *str = '/0';
?? return ptr;
}
關(guān)于c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實(shí)現(xiàn)方法將為大家介紹到這里啦,如果你還有不懂的地方就請(qǐng)留言給小編吧。
新聞熱點(diǎn)
疑難解答
圖片精選