繁体   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