我正在尝试读取文件的内容(包含'标准'文本和'二进制'数据)。
然后我需要获取该字符(标准或扩展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(数字每次都不同但在同一'范围')(有些东西告诉我这不正确):))
所以我显然做错了什么,但我似乎无法弄明白......
非常感谢任何帮助。
答案 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);