簡體   English   中英

從文件中讀取擴展的ASCII字符並轉換為ASCII十進制值

[英]Read Extended ASCII Characters from File and Convert to ASCII Decimal Value

我正在嘗試讀取文件的內容(包含“標准”文本和“二進制”數據)。

然后,我需要使用該字符(標准或擴展ASCII)並獲取相應的十進制(int)ASCII值。

我有一點時間讓它正常工作。

這是一段代碼,以幫助顯示我目前在做什么...

FILE *fp = fopen(file, "r+");

char *value = NULL;

size_t charSize = sizeof(char) + 1;

value = malloc(charSize);

strcpy(value, "0");

fseek(fp, offset, SEEK_SET);

fgets(value, charSize, fp);

int c = (int)value;

free(value);

我讀到的一句話是,您需要對擴展的ascii使用unsigned char,但是更改為unsigned char並不能解決問題(並給出了編譯警告)

我還嘗試將wchar_t與代碼結合使用:

....

wchar_t *value = NULL;
value = malloc(2);

wcscpy(value, (wchar_t *)"");

fseek(fp, offset, SEEK_SET);

fgetws(value, 2, fp);

int c = (int)value;

這些似乎都不起作用。 我要么基本上所有內容都得到0,要么得到一些“隨機”值。

例如,使用以下三種方法之一:值:%(正確)c:76678304(每次次數都不相同,但在相同的“范圍”內)(有些東西告訴我這是不正確的):)

所以我顯然做錯了,但我似乎無法弄清楚……

任何幫助將非常感謝。

我認為您的主要問題是:

int c = (int)value;

它應該是:

int c = *value;

您要取消引用值以使該字符位於該位置。 這等效於value[0] 以前,您是在將指針轉換為int的,這解釋了大的垃圾值。 不要拋棄您的問題。

strcpy是多余的,因為fgets將寫入兩個字節(最后一個是NUL終止符),除非它有錯誤或EOF。 如果確實要事前將其NUL終止,則應使用'\\ 0'(NUL),而不是'0'(ASCII數字0)。 您可以簡單地執行以下操作:

*value = '\0';

您的代碼比需要的要復雜得多-您可以執行以下操作:

FILE *fp = fopen(file, "r+");

fseek(fp, offset, SEEK_SET);

int c = fgetc(fp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM