从文件中读取扩展ASCII字符并转换为ASCII十进制值

时间:2010-07-14 04:21:57

标签: c type-conversion

我正在尝试读取文件的内容(包含'标准'文本和'二进制'数据)。

然后我需要获取该字符(标准或扩展ASCII)并获得相应的Decimal(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);

我读到了一个说你需要使用unsigned char作为扩展ascii的东西,但是更改为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(数字每次都不同但在同一'范围')(有些东西告诉我这不正确):))

所以我显然做错了什么,但我似乎无法弄明白......

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

我认为你的主要问题是:

int c = (int)value;

应该是:

int c = *value;

您取消引用值以获取该位置的角色。这相当于value[0]。之前,您正在构建一个指向int的指针,这解释了大的垃圾值。不要抛弃你的问题。

strcpy是多余的,因为fgets将写入两个字节(最后一个是NUL终结符),除非它有错误或EOF。如果您确实希望NUL在事先终止它,您将使用'\ 0'(NUL),而不是'0'(ASCII数字0)。你可以这样做:

*value = '\0';

答案 1 :(得分:0)

您的代码远比它需要的复杂得多 - 您可以简单地执行此操作:

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

fseek(fp, offset, SEEK_SET);

int c = fgetc(fp);