2015-04-06 100 views
0

我試圖在C中讀取.au文件的頭文件,並且我將所有值存儲在struct中,但無法將它們轉換爲Little Endian格式。AU文件的讀取頭 - C

我偶然發現了一個方法,ntohl應該把字節和轉換爲主機格式,但編譯我的程序時不斷收到錯誤。

undefined reference to 'ntohl'

#include <stdio.h> 

struct header 
{ 
    char magic[5]; 
    int offset; 
    int size; 
    int encoding; 
    int rate; 
    int channels; 
}; 

int main() 
{ 
    FILE *fin, *fout; 
    struct header au; 
    char path[10]; 

    printf("Enter name of file to be processed: "); 
    scanf("%s", path); 

    fin = fopen(path, "r"); 
    fout = fopen("out.au","w"); 

    fscanf(fin, "%s %d %d %d %d %d", &au.magic, &au.offset, &au.size, &au.encoding, &au.rate, &au.channels); 
    printf("%s\n%d\n%d\n%d\n%d\n%d\n", au.magic, ntohl(au.offset), ntohl(au.size), ntohl(au.encoding), ntohl(au.rate), ntohl(au.channels)); 
} 

我在報頭值讀數是否正確?

回答

1

Linux OS ntohlarpa/inet.h(或netinet/in.h)頭文件中聲明。在Windows這是Winsock2.h

至於讀取頭的正確性,這是不正確的。您正在做fscanf(fin, "%s %d %d %d %d %d...這是試圖讀取其文本表示中的數字,用空格分隔,這完全不是AU file表示的方式。該文件類型是一個二進制文件,應該使用fread作爲二進制文件讀取。