m*t 发帖数: 7490 | 1 (编程问题,这个版人多,问问)
原来有一些数据存档文件,是二进制文件,32位系统写的 (1 float=4 bytes, 1
double=8 bytes)
现在源程序在64位系统重新编译了,但是还想调这些数据,请问有什么方法能够不改源
程序就读(fread)的?多谢 |
s****c 发帖数: 11300 | 2 这个根本没变化 直接就能读 如果你是用windows的话
【在 m*t 的大作中提到】 : (编程问题,这个版人多,问问) : 原来有一些数据存档文件,是二进制文件,32位系统写的 (1 float=4 bytes, 1 : double=8 bytes) : 现在源程序在64位系统重新编译了,但是还想调这些数据,请问有什么方法能够不改源 : 程序就读(fread)的?多谢
|
m*t 发帖数: 7490 | 3 你确定
同一句语句 fread(buffer,1,sizeof(float),fp)
在32位和64位下读入字窜的长度相等?我怎么觉得一个读了4byte,一个读了8byte
还有,我用的是linux,不知道会不会有差别?
【在 s****c 的大作中提到】 : 这个根本没变化 直接就能读 如果你是用windows的话
|
s****c 发帖数: 11300 | 4 linux的话就去读手册。各个平台都不一样 这个和32bit或者64bit没啥关系
你先要搞懂32bit和64bit系统硬件上的区别 整体上来讲 最大的变化只是寻址空间的变
化 (还有一些 64bit指令集的加入,这个一般人都用不到)
至于float和int各是多长的 这个是平台相关的 就算是16bit的系统 也可以做float=
8byte
如果想要各个平台通用 那就要自己定义数据类型
【在 m*t 的大作中提到】 : 你确定 : 同一句语句 fread(buffer,1,sizeof(float),fp) : 在32位和64位下读入字窜的长度相等?我怎么觉得一个读了4byte,一个读了8byte : 还有,我用的是linux,不知道会不会有差别?
|
m*t 发帖数: 7490 | 5 好的,我试试
32bit 和 64bit ubuntu, gcc 编译一下sizeof就知道了
【在 s****c 的大作中提到】 : linux的话就去读手册。各个平台都不一样 这个和32bit或者64bit没啥关系 : 你先要搞懂32bit和64bit系统硬件上的区别 整体上来讲 最大的变化只是寻址空间的变 : 化 (还有一些 64bit指令集的加入,这个一般人都用不到) : 至于float和int各是多长的 这个是平台相关的 就算是16bit的系统 也可以做float= : 8byte : 如果想要各个平台通用 那就要自己定义数据类型
|
s****c 发帖数: 11300 | 6 对的
linux下面我程序写的少 一般windows下面我就不用float这样的东西了 直接int8
int16类似的
【在 m*t 的大作中提到】 : 好的,我试试 : 32bit 和 64bit ubuntu, gcc 编译一下sizeof就知道了
|
t****t 发帖数: 6806 | 7 这个, 人家要是需要用float的话是没办法用int16代替的吧.
【在 s****c 的大作中提到】 : 对的 : linux下面我程序写的少 一般windows下面我就不用float这样的东西了 直接int8 : int16类似的
|
t****t 发帖数: 6806 | 8 on linux gcc, you may use gcc -m32 to compile the program into 32 bit anyway
. you need to install 32 bit glibc though. 32/64 bit glibc don't conflict.
the most significant sizeof() change between gcc -m32 and gcc -m64 is the
sizeof(T*) and sizeof(long) is changed from 32 to 64.
other types, such as char, int, short, float, double, are not changed.
【在 m*t 的大作中提到】 : 你确定 : 同一句语句 fread(buffer,1,sizeof(float),fp) : 在32位和64位下读入字窜的长度相等?我怎么觉得一个读了4byte,一个读了8byte : 还有,我用的是linux,不知道会不会有差别?
|
s****c 发帖数: 11300 | 9 float也有啊
【在 t****t 的大作中提到】 : 这个, 人家要是需要用float的话是没办法用int16代替的吧.
|
o******d 发帖数: 1552 | 10 这个是你的project settings决定的。你的VC project settings里有这个选项,和系
统无关。如果你交叉编译或者用了特别的和win32有关的API什么的,是和系统有关。
【在 m*t 的大作中提到】 : 你确定 : 同一句语句 fread(buffer,1,sizeof(float),fp) : 在32位和64位下读入字窜的长度相等?我怎么觉得一个读了4byte,一个读了8byte : 还有,我用的是linux,不知道会不会有差别?
|