【发布时间】:2016-09-19 21:22:24
【问题描述】:
我知道 Big Endian 和 Little Endian 可以使用 BOM 进行编码,从而将它们泄露出去,但我很困惑如何在给定文件的 C 中对此进行评估。
00 00 FE FF -> UTF-32, big-endian
FF FE 00 00 -> UTF-32, little-endian
FE FF -> UTF-16, big-endian
FF FE -> UTF-16, little-endian
我有这段代码可以从文件中获取字节,但是假设文件以 BOM \xFF\xFE 或 \xFE\xFF 开头,我怎么知道它是小端还是大端 UTF-16。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
unsigned char c;
FILE *f = fopen(argv[1], "r");
while (fread(&c, sizeof(char), 1, f) == 1){
fprintf(stdout, "%x\n", c);
}
}
包含此 BOM 的文件会是什么样子? (在字节或常规文本中)? 我希望有人能帮帮忙。谢谢。
我对如何读取文件并测试包含 BOM 的第一个或多个字节是小端还是大端感到困惑?我该怎么做?
【问题讨论】:
-
我无法完全理解您的要求。我的意思是,您查看文件的前 2-4 个字节,并检查它们是否匹配您要识别的 BOM 之一。如果您不知道如何做到这一点,那么您需要更具体地说明您遇到问题的地方。
-
@John s/看到/看不到/;)。另外,OP,您可能想从
main()中选择return 0;,而且sizeof (char)的定义是1,所以你不需要那个。 -
至于文件“看起来[s] 像什么”,您必须再具体一点。您无法用肉眼看到文件本身。您是在谈论使用某种工具显示其内容吗?关于某些特定文件浏览器呈现的表示?还有什么?
-
还有一点,别忘了检查
argc并确保argv[1]不是NULL并且包含正确的数据;并检查fread()错误等。此外,到目前为止,您还没有使用任何实际需要<stdlib.h>的东西。 -
我对如何读取文件并测试包含 BOM 的第一个或多个字节是小端还是大端感到困惑?我该怎么做?
标签: c file endianness utf-16