c語言二進制操作
⑴ c語言如何讀寫二進制
詳細:http://hi..com/gibbon_ho/blog/item/9ca853e68447c42bb9382086.html
我一直覺得二進制文件讀寫是個很容易的事,所以一直沒在意,最近在寫一個http客戶端,實現文件下載的時候,發現總有問題,後來才發現是忘記寫文件用二進制方式,慚愧的很啊。然後,就在網上搜索了一下,發現通過C語言實現二進制文件讀寫的資料居然出奇的少,這讓我很憤怒,因為雖然這東西很簡單,但是對於初學者,往往會需要花很長的時間去弄,一旦明白,又發現花的時間很不值得,罷了,這里通過一個文件拷貝的例子來講講二進制文件的讀寫吧。先介紹函數,我們一共要用到三個函數,fopen,fread,fwrite。二進制讀寫的順序是用fopen以二進制方式打開讀寫文件,然後使用fread和fwrite兩個函數將數據寫入二進制文件中。下面我們看看一個拷貝程序的源碼:
Copy.c:#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 1024
int main(int argc, char *argv[])
{
if( argc < 3 )
{
printf("usage: %s %s\n", argv[0], "infile outfile");
exit(1);
}
FILE * outfile, *infile;
outfile = fopen(argv[2], "wb" );
infile = fopen(argv[1], "rb");
unsigned char buf[MAXLEN];
if( outfile == NULL || infile == NULL )
{
printf("%s, %s",argv[1],"not exit\n");
exit(1);
}
int rc;
while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 )
{
fwrite( buf, sizeof( unsigned char ), rc, outfile );
}
fclose(infile);
fclose(outfile);
system("PAUSE");
return 0;
}
⑵ C語言中怎麼輸出數據的二進制
二進制數不能像十進制那樣%d直接輸出。
如果想輸出一個數的二進制可以通過函數把其轉成2進制字元串再將其輸出。
itoa函數
原型:char*itoa(intvalue,char*string,intradix);
參數:int value 被轉換的整數,char *string 轉換後儲存的字元數組,int radix 轉換進制數,如2,8,10,16 進制等
功能:將任意類型的數字轉換為字元串。在<stdlib.h>中與之有相反功能的函數是atoi。
參考代碼:
1、
#include<stdlib.h>
#include<stdio.h>
intmain(void)
{
intnumber=10;
charstring[25];
itoa(number,string,2);
printf("十進制數:%d,二進制數:%s ",number,string);
return0;
}
/*
十進制數:10,二進制數:1010
*/
2、
voidprint_bin(intn)
{
intl=sizeof(n)*8;//總位數。
inti;
if(i==0)
{
printf("0");
return;
}
for(i=l-1;i>=0;i--)//略去高位0.
{
if(n&(1<<i))break;
}
for(;i>=0;i--)
printf("%d",(n&(1<<i))!=0);
}
⑶ c語言的二進制數值如何直接輸出
1、首先打開vc6.0, 新建一個項目。
⑷ c語言編程,如何將十進制轉化為2進制
c語言編程將十進制轉化為2進制可按手工轉換規則進行程序轉換。
整數佔四個位元組,每位元組8位,共32位。所以,可以定義一個32位的數組來存儲轉換結果。
循環將整數進行除2取余數,余數存儲到數組中。
當整數整除為0時,結束循環
逆序輸出數組,得到轉換結果
參考代碼:
#include<stdio.h>
voidmain()
{
intc[32],i=0,n;
scanf("%d",&n);//輸入待轉換整數n
do{
c[i++]=n%2;
n/=2;
}while(n!=0);
for(i--;i>=0;i--)
printf("%d",c[i]);
printf(" ");
}
⑸ C語言中進制的表示和轉換
C語言中常用的有十進制、二進制、八進制(用0表示)、十六進制(用0x表示)。
十進制轉二進制:
十進制轉二進制採取除於2取余的方式。
將十進制數除於2得到商和余數,
將商繼續除於2一直到商為0,
將得到的余數倒敘排列就是轉換為二進制的結果
二進制轉十進制:
從右向左用二進制位上的每一個數乘以2的相應次方
如二進制1010轉換為十進制:
1010 = 0*(2的0次方)+1*(2的1次方)+0*(2的2次方)+1*(2的3次方) = 2 + 8 = 10
八進制轉換為二進制
將二進制數自右向左每三位分為一段(若不足三位用0補齊),
然後將二進制的每三位轉換為一位八進制數
如將二進制數0101010轉換為八進制:
0 101 010不夠三位的補0得到
000 101 010 = 052 = 0052(八進制用0表示)
十六進制轉換為二進制
將二進制數自右向左每四位分為一段(若不足三位用0補齊),
然後將二進制的每4位轉換為一位十六進制數
如將二進制數0101100轉換為十六進制:
010 1100不夠三位的補0得到
0010 1100 = 2C= 0x2C(十六進制用0x表示)
⑹ c語言 將用戶輸入字元串轉化2進制並輸出
很簡單。假定你輸入的數字是整型(double型太麻煩)。
第一步:用強制類型轉換成int或者long
第二步,這時候有2種方法
①.使用位移操作符「<<」和「>>」,這個就很簡單了,
總共要移動的次數 = sizof(int或者long) * 8;
移位的時候做個判斷,移出來是『1』就輸出1,否則輸出0;
這種方法適合於很大的數字。要注意高位有時候是無意義的0.不用輸出
②.根據我們最熟悉的十進制轉二進制的原理編程。設強制轉換後的數為x;
則循環
do
{
cout << x%2;
x=x/2;
}while(x != 1)
這里不要忘了補一個最後一位
cout<<x;
一個完整的二進制就輸出完了,不過順序是倒著的而已。
這個方法適合於相對小的數字
⑺ C語言的二進制,八進制,十進制是什麼意思
計算機中常用的數的進制主要有:二進制、八進制、十六進制,學習計算機要對其有所了解。
2進制,用兩個阿拉伯數字:0、1;
8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;
10進制,用十個阿拉伯數字:0到9;
16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫
一、二進制轉換十進制
例:二進制 「1101100」
1101100 ←二進制數
6543210 ←排位方法
例如二進制換算十進制的演算法:
1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20
↑ ↑
說明:2代表進制,後面的數是次方(從右往左數,以0開始)
=64+32+0+8+4+0+0
=108
二、二進制換算八進制
例:二進制的「10110111011」
換八進制時,從右到左,三位一組,不夠補0,即成了:
010 110 111 011
然後每組中的3個數分別對應4、2、1的狀態,然後將為狀態為1的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
結果為:2673