- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个程序来执行各种处理并将结果写入/读取文件。
这个“结果”在这样的结构中
struct res
{
char id;
char* values;
int count;
long samplenumber;
};
假设我用这些函数写/读
write( file, &result, sizeof(struct res) );
read(file, &result, filesize(file) );
我担心的是:如果结构在 32b 机器上编写并在 64 机器上读取(或其他方式),会出现什么问题?
我不是要求对我目前正在做的事情进行任何改进,而是关于可移植性方面的工作方式问题。
最佳答案
这里有4个问题:
~ 类型的大小可以不同。 (使用 stdint.h
中的类型,例如 uint32_t
。)
~ 编译器通常会在你的结构中插入填充,比如
struct res
{
char id;
/* unused byte */
/* unused byte */
/* unused byte */
char* values;
int count;
long samplenumber;
};
~ 整数的字节顺序可以不同。例如,3555896322
可以表示为D3 F2 AC 02
或02 AC F2 D3
。
~ char*
将作为无用指针保存到文件中。您需要自己逐字节编写字符串。
解决方案:
~ 使用 stdint.h
中的类型。
~ 不要使用结构来保存。 (或者使用所谓的 #pragma pack
,但请记住它不可移植。)
~ 逐字节写入整数,如
uint32_t var = 3555896322;
putc(var >> 0 & 0xff, file);
putc(var >> 8 & 0xff, file);
putc(var >> 16 & 0xff, file);
putc(var >> 24 & 0xff, file);
~ 逐字节写入字符串,例如:
const char *ptr = "Hello, young programmer!";
while (*ptr)
putc(*(ptr++), file);
putc('\0', file);
~ 浮点类型可以直接保存,它们通常到处都是相同的大小:
float a = 1.23;
fwrite(&a, sizeof (float), 1, file);
关于c - 便携性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28170251/
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 10年前关
我想做的是使 sbt 可移植,至少可以在不同的 Windows 机器之间移植,这样我的 sbt 插件、设置、ivy repo 等就不必在每台计算机上重新设置。 我的方法是把 sbt.bat , sbt
我似乎看到很多答案有人建议使用 生成随机数,通常伴随着这样的代码: std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_d
我正在使用 perl(希望它不会影响任何东西),但我需要知道如何为连接操作设置超时。问题是我不能永远等待连接操作的发生。如果它没有在几秒钟内发生,我宁愿放弃并继续前进。 socket(my $sock
是否有一种简单、可移植的方式(至少是 win32,linux)将 UTF-16 转换为 UTF-8 并返回?最好使用 boost。 谢谢你的帮助,托拜厄斯 最佳答案 两者都是libiconv和 icu
我将飞往澳大利亚(飞行约 15 小时),我想在飞机上继续我当前的项目。 我的项目(CakePHP 框架上的网站)需要一个 LAMP 包,所以我正在寻找一种非常便携、价格合理的设备,可以安装 LAMP,
我想在我们的编程课上在我们学校的计算机(在 Windows 下)上运行 python3。我在家里(使用 Windows)将 python 3.1 安装到 USB 闪存驱动器上,并将其带到学校。但是,它
出于教学目的,我正在寻找适用于 Mac、Windows 和可能的 Linux 的独立 PHP 二进制文件。 计划将二进制文件作为单个文件分发给学生,用于测试 PHP 脚本,而无需安装完整的 Web 服
关于好的 Git GUI 的任何建议。理想情况下应具有以下特征: 没有太多限制,即可以支持相对复杂的功能,例如 rebase ,没有-ff 以“学习模式”显示正在执行的 Git 命令,尤其是具有很多选
我是一名优秀的程序员,十分优秀!