C语言将ip地址的二进制形式转化为十进制的形式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言将ip地址的二进制形式转化为十进制的形式相关的知识,希望对你有一定的参考价值。

题目的意思是输入一个32位的二进制的数,每8位转化为一个十进制的书,将其转化为十进制的ip地址。

然后我写的代码是这样的
#include<stdio.h>
int main()

int n,i,j,k;
int erdn[8]=128,64,32,16,8,4,2,1;//二进制每一位的权重
char ip[4][8];//储存ip地址的二进制形式
scanf("%d",&n);
while(n--)

int sum[4]=0;//清空上一组的数据
scanf("%s",ip);//输入数据
for(j=0;j<4;j++)

for(k=0;k<8;k++)

ip[j][k]-='0';//求出每一位的值,原来是字符型
sum[j]+=(ip[j][k]*erdn[k]);//每一位加上自己的权重

//if(ip[j][0]) sum[j]+=128;

printf("%d.%d.%d.%d\n",sum[0],sum[1],sum[2],sum[3]);

return 0;

问题是,将这32位的数分成四组之后,每组的第一个数并没有乘以128加到sum这个数组中去
比如我输入1000000100000010000001000000(一个1带七个0x4)输出就是0.0.0.0(四个0)
请问一下各位大神这究竟是哪里错了

#include "stdio.h"
void main()

char a[32]; /*输入的二进制数据*/
int b[4]; /*输出的IP地址数据*/
int c[8]=128,64,32,16,8,4,2,1; /*查询表*/
int temp;
int sum;
int i;
int m;
printf("请输入32位二进制数字:");
for(i=0;i<32;i++)
scanf("%c",&a[i]);
/*scanf("%s",a);*/ /*可以按字符串输入,字符串输入是要注意末尾的\0*/
printf("输入的二进制数字是:\n");
for(i=0;i<32;i++)
printf("%c",a[i]); /*显示输入二进制数据,也可按串输入*/
for(i=0;i<4;i++)

sum=0;
for(m=0;m<8;m++)

temp=8*i+m;
sum+=(int)(a[temp]-'0')*c[m]; /*累加*/

b[i]=sum;

printf("输出的IP地址为:\n");
for(i=0;i<3;i++)

printf("%d.",b[i]);

printf("%d\n",b[i]);
参考技术A #include<stdio.h>
int main()

int i,b[4]=0,erdn[8]=128,64,32,16,8,4,2,1;
char a[32];
printf("请输入32位二进制数 ;\n");
scanf("%s",&a);
for(i=0;i<8;i++)

if(a[i]=='1')
b[0]+=erdn[i];

for(i=8;i<16;i++ )

if(a[i]=='1')
b[1]+=erdn[i-8];

for(i=16;i<24;i++)

if(a[i]=='1')
b[2]+=erdn[i-16];

for(i=24;i<32;i++)

if(a[i]=='1')
b[3]+=erdn[i-24];

for(i=0;i<4;i++)

printf("%d",b[i]);
if(i%1==0&&i<3)
printf(".");

return 0;
参考技术B #include<stdio.h>
void main()

int a;
char s[20]; int i=0,rem;
printf("请输入整数:\n"); scanf("%d",&a); do

rem=a%2; a=a/2;
s[i]=rem;
i++;
while(a!=0);
printf("输出的二进制:"); while(i>0)
printf("%d",s[--i]); printf("\n");
追问

这是十进制转化为二进制,我的题目是二进制转化为十进制。。。。

将ip转换为二进制

我试图将4个输入的IP地址八位字节转换为二进制形式。这只是将第一个八位字节转换为8位形式的代码的一部分。 'oc'是八位字节 - 当我开始工作时,我将修复变量名称。

remainder = 0

bits = (128,64,32,16,8,4,2,1)

binary = [0,0,0,0,0,0,0,0]

oc = int(input("Enter oc1: "))
if oc > 256:
    print("Only 256 or less")

if oc > bits[0] or oc == bits[0]:
    binary[0] = 1
    remainder = remainder + oc - bits[0]
    print(binary)
    print(remainder)
elif oc < bits[0]:
    binary[0] = 0
    print(binary)

if remainder > bits[1] or remainder == bits[1]:
    binary[1] = 1
    remainder = remainder - bits[1]
    print(binary)
    print(remainder)
elif oc < bits[1]:
    binary[1] = 0
    print(binary)

if remainder > bits[2] or oc == bits[2]:
    binary[2] = 1
    remainder = remainder - bits[2]
    print(binary)
    print(remainder)
elif oc < bits[2]:
    binary[2] = 0
    print(binary)

当我输入128或更大的八位字节时,我得到一个成功的输出。

例如:输入'192'将显示'1,1,0,0,0,0,0,0'但是低于128的任何值并且输出全部为零。

我相信,我也可以使用循环,但不知道如何。

答案

这对你有用吗?

oc = int(input("Enter oc1: "))
if oc > 256:
    print("Only 256 or less")
else:
    binary = bin(oc)[2:]

bin()将一个整数转换为二进制,并使用[2:]附加项删除前导的'0b',否则你会获得。

如果要确保有8个字符,前导零,则可以使用zfill()。作为另一个附属物,zfill(n)将添加前导零,直到你的字符串长n个字符。

binary = bin(oc)[2:].zfill(8)
另一答案

将IPv4地址转换为二进制:

ip=raw_input("Enter the ip address
") #input the ipv4 address
ips=ip.split('.') #split by '.'

for i in ips:  #ips is a list of octets,
 ##we parse through the list to convert each of these to binary
    print(format(int(i),'08b')) #Use format '08b' to add leading '0' to form '8' digits of binary 'b'

输入:

192.95.01.56

输出:

11000000
01011111
00000001
00111000
另一答案

@Tom给出的解决方案似乎是最合适的。但是,如果你想要将十进制转换为二进制的基础学校数学,一个解决方案是这个。

import sys

string = "127.0.0.1"
oc = string.split(".")
for i in range(0, 4) :
   num = int(oc[i]) 
   j = 0;
   remlist = []
   while num > 0 :
       rem = num % 2
       j = j + 1
       remlist.append(rem)
       num = num / 2

   for x in range(j, 8) :
       remlist.append(0)    
   for element in reversed(remlist) :  
       print element,
   if i < 3 :
       print ".", 

以上是关于C语言将ip地址的二进制形式转化为十进制的形式的主要内容,如果未能解决你的问题,请参考以下文章

C语言 如何将16进制形式的字符串,转化为相同的16进制的整型?

c语言十六进制字符转化成十进制数字问题

用C语言将16进制数转化为10进制数 16进制数以字符串形式输入 最好运用数组 谢谢

c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。

c语言中如何将10进制的浮点数转化为16进制数

excel里将16进制转换为IP地址