11 个解决方案
#1
先换成十进制 在转换成八进制十六进制啊
#2
二进制:11111111
八进制:11,111,111 = 377
3 7 7
十六进制:1111,1111 = FF
F F
八进制:11,111,111 = 377
3 7 7
十六进制:1111,1111 = FF
F F
#3
char input[9] = "10010000";
int x = 0;
for (int i = 0; i < 8; x = x << 1 | input[i] & 1, i++);
printf("%o %x\n", x, x);
我只是来吐槽的...
#4
顶二楼!用一个数组存储所二进制,然后从左到有按二楼那样计算,编程实现也不难。
#5
可以先换成十进制数,然后再转换成八进制和十六进制
#6
看看这个多给力,printf或者sprintf都有如此强大的能力,外加霍纳法则将任何进制数转化成10进制。
#7
先按权相加,转化成十进制。
然后 printf("%o %x",n,n);
就行了
然后 printf("%o %x",n,n);
就行了
#8
参考一下?
#include <stdio.h>
#define LEN (sizeof(int)*8)
#define DEBUG 0
void read_bin(int*);
int read_bint(const char *);
int main(void)
{
int a;
#if DEBUG
char s[LEN+1];
#endif
while(8)
{
#if DEBUG
printf("请输入二进制字符串:");
rewind(stdin);
fgets(s,LEN+1,stdin);
a=read_bint(s);
#else
printf("请输入二进制数:");
rewind(stdin);
read_bin(&a);
#endif
printf("十进制值为:%d\n",a);
}
return 0;
}
void read_bin(int *p)
{
int ch,i=0;
char str[LEN]={0};
while((ch=getchar())!=EOF&&i<LEN)
{
if(ch=='1'||ch=='0')
str[i++]=ch;
else break;
}
for(*p=0,i=0;i<LEN&&str[i]!='\0';i++)
*p=(*p)*2+(str[i]-'0');
}
int read_bint(const char *str)
{
int i,c=0;
for(i=0;i<LEN&&str[i]!='\0';i++)
{
if(str[i]=='1'||str[i]=='0')
c=c*2+(str[i]-'0');
else break;
}
#9
给你一个把8位的数转成16进制的宽字符文字的高效方法,八进制的类似
使用:
wcout<<ToHex[123];
WCHAR ToHex[256][3]= {L"00", L"01", L"02", L"03", L"04", L"05", L"06", L"07", L"08", L"09", L"0A", L"0B", L"0C", L"0D", L"0E", L"0F", L"10", L"11", L"12", L"13", L"14", L"15", L"16", L"17", L"18", L"19", L"1A", L"1B", L"1C", L"1D", L"1E", L"1F", L"20", L"21", L"22", L"23", L"24", L"25", L"26", L"27", L"28", L"29", L"2A", L"2B", L"2C", L"2D", L"2E", L"2F", L"30", L"31", L"32", L"33", L"34", L"35", L"36", L"37", L"38", L"39", L"3A", L"3B", L"3C", L"3D", L"3E", L"3F", L"40", L"41", L"42", L"43", L"44", L"45", L"46", L"47", L"48", L"49", L"4A", L"4B", L"4C", L"4D", L"4E", L"4F", L"50", L"51", L"52", L"53", L"54", L"55", L"56", L"57", L"58", L"59", L"5A", L"5B", L"5C", L"5D", L"5E", L"5F", L"60", L"61", L"62", L"63", L"64", L"65", L"66", L"67", L"68", L"69", L"6A", L"6B", L"6C", L"6D", L"6E", L"6F", L"70", L"71", L"72", L"73", L"74", L"75", L"76", L"77", L"78", L"79", L"7A", L"7B", L"7C", L"7D", L"7E", L"7F", L"80", L"81", L"82", L"83", L"84", L"85", L"86", L"87", L"88", L"89", L"8A", L"8B", L"8C", L"8D", L"8E", L"8F", L"90", L"91", L"92", L"93", L"94", L"95", L"96", L"97", L"98", L"99", L"9A", L"9B", L"9C", L"9D", L"9E", L"9F", L"A0", L"A1", L"A2", L"A3", L"A4", L"A5", L"A6", L"A7", L"A8", L"A9", L"AA", L"AB", L"AC", L"AD", L"AE", L"AF", L"B0", L"B1", L"B2", L"B3", L"B4", L"B5", L"B6", L"B7", L"B8", L"B9", L"BA", L"BB", L"BC", L"BD", L"BE", L"BF", L"C0", L"C1", L"C2", L"C3", L"C4", L"C5", L"C6", L"C7", L"C8", L"C9", L"CA", L"CB", L"CC", L"CD", L"CE", L"CF", L"D0", L"D1", L"D2", L"D3", L"D4", L"D5", L"D6", L"D7", L"D8", L"D9", L"DA", L"DB", L"DC", L"DD", L"DE", L"DF", L"E0", L"E1", L"E2", L"E3", L"E4", L"E5", L"E6", L"E7", L"E8", L"E9", L"EA", L"EB", L"EC", L"ED", L"EE", L"EF", L"F0", L"F1", L"F2", L"F3", L"F4", L"F5", L"F6", L"F7", L"F8", L"F9", L"FA", L"FB", L"FC", L"FD", L"FE", L"FF"};
使用:
wcout<<ToHex[123];
#10
#define LEN (2*sizeof(int))
void zwhex16(int n) /*输出16进制函数*/
{
char *hex="0123456789ABCDEF";
int i=LEN-1;
char b[LEN];
while (i>=0)
{
b[i--]=(n&0xf);
n>>=4;
}
printf("\n16进制为:0x");
for (i=0;i<LEN;i++)
putchar(hex[b[i]]);
}
#11
已经OK了,谢谢各位帮忙!
#1
先换成十进制 在转换成八进制十六进制啊
#2
二进制:11111111
八进制:11,111,111 = 377
3 7 7
十六进制:1111,1111 = FF
F F
八进制:11,111,111 = 377
3 7 7
十六进制:1111,1111 = FF
F F
#3
char input[9] = "10010000";
int x = 0;
for (int i = 0; i < 8; x = x << 1 | input[i] & 1, i++);
printf("%o %x\n", x, x);
我只是来吐槽的...
#4
顶二楼!用一个数组存储所二进制,然后从左到有按二楼那样计算,编程实现也不难。
#5
可以先换成十进制数,然后再转换成八进制和十六进制
#6
看看这个多给力,printf或者sprintf都有如此强大的能力,外加霍纳法则将任何进制数转化成10进制。
#7
先按权相加,转化成十进制。
然后 printf("%o %x",n,n);
就行了
然后 printf("%o %x",n,n);
就行了
#8
参考一下?
#include <stdio.h>
#define LEN (sizeof(int)*8)
#define DEBUG 0
void read_bin(int*);
int read_bint(const char *);
int main(void)
{
int a;
#if DEBUG
char s[LEN+1];
#endif
while(8)
{
#if DEBUG
printf("请输入二进制字符串:");
rewind(stdin);
fgets(s,LEN+1,stdin);
a=read_bint(s);
#else
printf("请输入二进制数:");
rewind(stdin);
read_bin(&a);
#endif
printf("十进制值为:%d\n",a);
}
return 0;
}
void read_bin(int *p)
{
int ch,i=0;
char str[LEN]={0};
while((ch=getchar())!=EOF&&i<LEN)
{
if(ch=='1'||ch=='0')
str[i++]=ch;
else break;
}
for(*p=0,i=0;i<LEN&&str[i]!='\0';i++)
*p=(*p)*2+(str[i]-'0');
}
int read_bint(const char *str)
{
int i,c=0;
for(i=0;i<LEN&&str[i]!='\0';i++)
{
if(str[i]=='1'||str[i]=='0')
c=c*2+(str[i]-'0');
else break;
}
#9
给你一个把8位的数转成16进制的宽字符文字的高效方法,八进制的类似
使用:
wcout<<ToHex[123];
WCHAR ToHex[256][3]= {L"00", L"01", L"02", L"03", L"04", L"05", L"06", L"07", L"08", L"09", L"0A", L"0B", L"0C", L"0D", L"0E", L"0F", L"10", L"11", L"12", L"13", L"14", L"15", L"16", L"17", L"18", L"19", L"1A", L"1B", L"1C", L"1D", L"1E", L"1F", L"20", L"21", L"22", L"23", L"24", L"25", L"26", L"27", L"28", L"29", L"2A", L"2B", L"2C", L"2D", L"2E", L"2F", L"30", L"31", L"32", L"33", L"34", L"35", L"36", L"37", L"38", L"39", L"3A", L"3B", L"3C", L"3D", L"3E", L"3F", L"40", L"41", L"42", L"43", L"44", L"45", L"46", L"47", L"48", L"49", L"4A", L"4B", L"4C", L"4D", L"4E", L"4F", L"50", L"51", L"52", L"53", L"54", L"55", L"56", L"57", L"58", L"59", L"5A", L"5B", L"5C", L"5D", L"5E", L"5F", L"60", L"61", L"62", L"63", L"64", L"65", L"66", L"67", L"68", L"69", L"6A", L"6B", L"6C", L"6D", L"6E", L"6F", L"70", L"71", L"72", L"73", L"74", L"75", L"76", L"77", L"78", L"79", L"7A", L"7B", L"7C", L"7D", L"7E", L"7F", L"80", L"81", L"82", L"83", L"84", L"85", L"86", L"87", L"88", L"89", L"8A", L"8B", L"8C", L"8D", L"8E", L"8F", L"90", L"91", L"92", L"93", L"94", L"95", L"96", L"97", L"98", L"99", L"9A", L"9B", L"9C", L"9D", L"9E", L"9F", L"A0", L"A1", L"A2", L"A3", L"A4", L"A5", L"A6", L"A7", L"A8", L"A9", L"AA", L"AB", L"AC", L"AD", L"AE", L"AF", L"B0", L"B1", L"B2", L"B3", L"B4", L"B5", L"B6", L"B7", L"B8", L"B9", L"BA", L"BB", L"BC", L"BD", L"BE", L"BF", L"C0", L"C1", L"C2", L"C3", L"C4", L"C5", L"C6", L"C7", L"C8", L"C9", L"CA", L"CB", L"CC", L"CD", L"CE", L"CF", L"D0", L"D1", L"D2", L"D3", L"D4", L"D5", L"D6", L"D7", L"D8", L"D9", L"DA", L"DB", L"DC", L"DD", L"DE", L"DF", L"E0", L"E1", L"E2", L"E3", L"E4", L"E5", L"E6", L"E7", L"E8", L"E9", L"EA", L"EB", L"EC", L"ED", L"EE", L"EF", L"F0", L"F1", L"F2", L"F3", L"F4", L"F5", L"F6", L"F7", L"F8", L"F9", L"FA", L"FB", L"FC", L"FD", L"FE", L"FF"};
使用:
wcout<<ToHex[123];
#10
#define LEN (2*sizeof(int))
void zwhex16(int n) /*输出16进制函数*/
{
char *hex="0123456789ABCDEF";
int i=LEN-1;
char b[LEN];
while (i>=0)
{
b[i--]=(n&0xf);
n>>=4;
}
printf("\n16进制为:0x");
for (i=0;i<LEN;i++)
putchar(hex[b[i]]);
}
#11
已经OK了,谢谢各位帮忙!