[英]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.