當前位置:首頁 » 編程語言 » 用C語言提取數據中特定位元組
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用C語言提取數據中特定位元組

發布時間: 2022-03-08 21:42:42

① 怎樣用c語言提取txt中特定字元串

用fgets讀入一行,用sscanf 讀出第一列數據
下面假定第一列數據作為字元串,用 sscanf(buf,"%s", 。。。格式讀。
類似,整型用 %d 浮點用 %f %lf ....

#include <stdio.h>
#include <stdlib.h>
main(){
char buf[100];
char col[100][30];
int n=0;
FILE *fp = fopen("a.txt", "r");
while ( fgets(buf, 100, fp) != NULL) {
if ( sscanf(buf,"%s",col[n]) == 1){printf("%s\n", col[n]); n++; };
}
return 0;
}

如果要讀每行第一個數,(只讀一位數 用 格式 %1d):
int x[100];
...
while ( fgets(buf, 100, fp) != NULL) {
if ( sscanf(buf,"%1d",&x[n]) == 1){ printf("%d\n",x[n]);n++;};

② 如何用c語言提取一個文件中的指定類型的數據

fscanf 函數應該可以,按類型讀取

③ c語言中如何提取二進制數中的某一位

下面是三種方式:

①通過模2除2(%2、/2)的方法

num%2——取出二進制的最後一位

num/2——右移去掉二進制的最後一位

通過while循環,依次取出二進制的最後一位數字判斷是否為1,若為1則count++,while(num)只有當num變為0時循環結束。

問題:在測試-1出現bug,-1的二進制中應該有32個1,輸出卻為0。我們將-1帶入代碼中發現-1%2=0,count不增,然後-1/2=0,循環結束,故輸出count的值為0。

解決方案:將變數num的數據類型改為unsigned int (無符號整型),此時表示的是正的整型的最大值,所以當num=-1時,表示二進制為32個1的正數,通過循環可以輸出正確的個數。

②通過右移操作符(>>)、按位與操作符(&)實現

Example:當num=10(1010),通過右移操作num>>i,二進制向右移動i位。

//i=0,num>>0,右移0位,此時(1010)&(0001)=0

//i=1,num>>1,右移1位,此時(0101)&(0001)=1,count++

//i=2,num>>2,右移2位,此時(0010)&(0001)=0

//i=3,num>>3,右移3位,此時(0001)&(0001)=1,count++

……

因為二進制共32位,所以循環要執行32次後結束,得到count為2。

缺點:不夠高效,必須循環32次。

③通過按位與操作符(&)巧妙運算實現

Example: 當num=15時,

1//num&(num-1)=(1111)&(1110)=(1110)

2//num&(num-1)=(1110)&(1101)=(1100)

3//num&(num-1)=(1100)&(1011)=(1000)

4//num&(num-1)=(1000)&(0111)=0 ,循環停止。共執行4次while循環。

(3)用C語言提取數據中特定位元組擴展閱讀

一、指定的某一位數置1

宏 #define setbit(x,y) x|=(1<<y)

二、指定的某一位數置0

宏 #define clrbit(x,y) x&=~(1<<y)

三、指定的某一位數取反

宏 #define reversebit(x,y) x^=(1<<y)

四、獲取的某一位的值

宏 #define getbit(x,y) ((x) >> (y)&1)



④ C語言中怎樣讀取一個8位位元組某一位的簡單

可以用下面的程序讀取一個字元的每一位:

#include<stdio.h>

int main()

{

unsigned char c;

int i;

scanf("%c",&c);//讀取一個字元,如要讀取一個0~255的整數,可將%c改為%u

for(i=7;i>=0;i--)

printf("%d",(c & 1<<i)!=0);//依次輸出它的每一個二進制位

printf(" ");

getch();

return 0;

}

⑤ C語言如何讀文件指定的位元組,有哪些庫函數

int fseek(
FILE *stream,
long offset,
int origin
);
stream 文件指針.offset 從第三個參數origin開始計算的偏移位元組數origin 初始位置必須為STDIO.H中定義的以下值之一: SEEK_CUR 文件指針的當前位置.SEEK_END 文件末尾.SEEK_SET 文件開頭.</SPAN></dd>如果成功, fseek 返回0. 否則返回非零值. 使用這個函數定位後,你就可以取到你想要位置的位元組了。以上是我從MSDN上翻譯過來的。

⑥ C語言如何讀取文件中指定的某一段

#include<stdio.h>

#include<string.h>

#define TBEGIN "B"

#define TEND "END B"

void main() { FILE *fp; char buffer[256];

if ( fp=fopen("c:\test.txt","r") ) {

while ( !feof(fp) ) { fgets(buffer,255,fp); if ( strcmp(buffer,TBEGIN)==0 ) break; }

while ( !feof(fp) ) {

fgets(buffer,255,fp); if ( strcmp(buffer,TEND)==0 ) break; else printf("%s ",buffer);

}

fclose(fp);

} else printf("無法打開文本文件. ");

}

⑦ C語言中怎樣讀取一個8位位元組某一位

bit a;
a=(ADCPSRA)&(0x08);
比如ADCPSRA=11011000,和
00001000位與一下,就可以把該位取出來,結果是1,如果ADCPSRA=11010000,位與一下就是0,我說的對嗎

⑧ C語言,將一個位元組數據的某個位提取出來,用這樣的宏定義可不可以

宏是編譯前替換展開的,要注意括弧哦親~
#define RX_DR ((sta)&0x40)

⑨ 在c語言中什麼確定某一數據所需要的存儲位元組數

要確定數據佔用多少位元組存儲,需要認真進行分析,區分起來有如下內容需要注意:
1、是否是簡單數據類型。簡單數據類型包括系統自帶的int、float、double、char、long、long long、short等,對於這類型數據,要知道佔用的存儲位元組數,只需要對其進行sizeof(類型)即可。
2、復雜數據類型:這類包括數組、聯合(union)、結構體。數組的情況有一些特殊,如果你的數組是在作用域內定義,直接sizeof(數組名)可以獲取數組所佔位元組數,但是如果作為參數傳入函數,無法使用這種方法。聯合所佔位元組數為其中所有元素中最大的一個所佔的位元組數。結構體的所佔位元組數用sizeof(結構體)可以求得。
3、注意:字元串數組單獨拿出來討論,如果你需要一個10位元組的字元串數組,一定記得多算一個結束符的位置。