您好、欢迎来到现金彩票网!
当前位置:2019跑狗图高清彩图 > 写整数内存 >

C++中使用MapViewOfFile对文件进行映像如何按整数读取映像文件的

发布时间:2019-07-28 13:12 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部用法应该没错,如果没有读到和你想象中一致的数据,可能有以下几种原因:

  1. 你要读取的整数是8位,16位,还是32位,是无符号还是有符号?需要使用对应的类型,8位是char,16位是short,32位是int。如果使用了int,实际上是一次读四个字节,当作32位整数处理。如果你是要读八位的字节(无符号类型)的话,那应该用unsigned char,然后转化成int:

  2. 小端和大端格式。Windows下是小端格式,比如一个整数0x11223344,存在内存中的顺序是:

  另一些系统使用大端格式,存在内存中的顺序和书写顺序一致是11 22 33 44。从这些系统中迁移数据需要颠倒字节顺序。

  3. 对齐边界。如果指定的偏移没对齐到16位或32位的边界的线位没有这个问题。

  如果你所谓按整数读取的意思是比如你在记事本打开文件可以看到这个数字100,然后你希望把这个100读出来,那么你的读法就是完全错误的。

  展开全部从程序输出的结果来看,你的程序运行的完全正确,就是说,是按照源代码运行的,但你的本意可能并非如此。

  你要映射的文件内容是11 22 33 44. 你可能想象运行后应该是22 11 33 44。但按照程序运行下来,结果确实应该是2 3311 2。

  11 22 33 44是键盘输入的吧。文件是用某个文本编辑程序做的吧。计算机里保存的文件是按二进制编码的,文本文件的字符也不例外。在这个文件中,11 22 33 44实际上保存成:

  但你的程序却要把他们映射成整形数据. 一个整数是四个字节, 因此, 程序把第一组4个字节作为base[0], 第二组4个字节作为base[1], 即:

  所谓MapVieew, 就是说文件的内容和所映射的内存是一致的. 因此, 内存把整数11表示为0x0000000B, 四个字节顺序为十六进制的0B 00 00 00,

  那么文件中那四个字节也是0B 00 00 00才对. 用文本编辑软件手工敲进的整数叫数字字符, 不是整形数据. 你骗计算机说这是整形数据, 当然出不来你预想的结果了.

  你的程序别作任何修改, 你的所谓整形数据文件也不做任何修改, 只需在swap()之前加上一行:

  程序结束后当然base[0]=11, base[1]=22了. 但重要的是你的数据文件(前8字节)真正成为你需要的整形数据文件了. 他的前8个字节是:

  把刚刚增加的这一行删掉, 恢复原来的样子编译后执行, 会看到11和22互相交换位置了, 可能你原来就预想的这个结果吧.

  使用MapViewOfFile对文件进行映射,如何按整数读取文件的内容?关键在于你建立的文件确实是整型数的文件.

  所映射文件的建立一般也是直接把内存内容拷贝到映射区中去. 举例: 整型数组a[N]保存成文件(映射内存指针为p):

  但是直接操作映射区更能发挥MaView的优势。比如顺序向文件中写入0,100,200,300,400的整数:

  展开全部从程序输出的结果来看,你的程序运行的完全正确,就是说,是按照源代码运行的,但你的本意可能并非如此。

  你要映射的文件内容是11 22 33 44. 你可能想象运行后应该是22 11 33 44。但按照程序运行下来,结果确实应该是2 3311 2。

  11 22 33 44是键盘输入的吧。文件是用某个文本编辑程序做的吧。计算机里保存的文件是按二进制编码的,文本文件的字符也不例外。在这个文件中,11 22 33 44实际上保存成:

  但你的程序却要把他们映射成整形数据. 一个整数是四个字节, 因此, 程序把第一组4个字节作为base[0], 第二组4个字节作为base[1], 即:

  所谓MapVieew, 就是说文件的内容和所映射的内存是一致的. 因此, 内存把整数11表示为0x0000000B, 四个字节顺序为十六进制的0B 00 00 00,

  那么文件中那四个字节也是0B 00 00 00才对. 用文本编辑软件手工敲进的整数叫数字字符, 不是整形数据. 你骗计算机说这是整形数据, 当然出不来你预想的结果了.

  你的程序别作任何修改, 你的所谓整形数据文件也不做任何修改, 只需在swap()之前加上一行:

  程序结束后当然base[0]=11, base[1]=22了. 但重要的是你的数据文件(前8字节)真正成为你需要的整形数据文件了. 他的前8个字节是:

  把刚刚增加的这一行删掉, 恢复原来的样子编译后执行, 会看到11和22互相交换位置了, 可能你原来就预想的这个结果吧.

  使用MapViewOfFile对文件进行映射,如何按整数读取文件的内容?关键在于你建立的文件确实是整型数的文件.

  所映射文件的建立一般也是直接把内存内容拷贝到映射区中去. 举例: 整型数组a[N]保存成文件(映射内存指针为p):

  但是直接操作映射区更能发挥MaView的优势。比如顺序向文件中写入0,100,200,300,400的整数:

http://katzztheva.com/xiezhengshunacun/483.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有