【发布时间】:2015-11-20 05:50:38
【问题描述】:
我主要是一名 Python 程序员,但我一直在使用 C,因为 Python 对于图形来说太慢了(20 fps 移动分形 FTW)。虽然我遇到了一个症结... 我在十六进制编辑器中编写了一个小文件进行测试。当我尝试读取第一个字节 5A 时,它通过这样的程序正确地给了我 90...
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
FILE *data;
int main(int argc, char* argv[])
{
data=fopen("C:\\vb\\svotest1.vipc","r+b");
unsigned char number;
fread(&number,1,1,data);
printf("%d\n",number);
}
但是当我尝试将前四个字节 5A F3 5B 20 读入一个整数时,我得到 542896986
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
FILE *data;
int main(int argc, char* argv[])
{
data=fopen("C:\\vb\\svotest1.vipc","r+b");
unsigned long number;
fread(&number,1,4,data);
printf("%d\n",number);
}
应该是1525898016!!! 问题是它颠倒了字节顺序。嘎!当然!该程序的工作方式取决于机器。既然我们谈到了这个主题,即使是字节也不能在每台机器上工作!
所以我需要帮助...在 Python 中,我可以使用 struct.pack 和 struct.unpack 以任何格式(长、短、单、双、有符号、无符号、大端、小端)将数据打包成字节,并且打开它。我在 C 中需要这样的东西...我可以自己写,但我不知道怎么写。
【问题讨论】:
-
如果您在快速访问文件时遇到问题,可以阅读有关 mmap 的信息。如果没有,请忽略我。