2010-05-09 111 views
0

我有一些以二进制格式读写数据的C++代码。我想看看它在文件中读取和写入的内容,所以我想将它转换为二进制读取和写入非二进制读写。另外,当我将二进制写入转换为非二进制写入时,我希望它仍然能够正确读取信息。如何才能做到这一点?如何在C++中将二进制读取/写入转换为非二进制读取/写入

写入功能:

int btwrite(short rrn, BTPAGE *page_ptr) 
{ 
// long lseek(), addr; 
    long addr; 
    addr = (long) rrn * (long) PAGESIZE + HEADERSIZE; 
    lseek(btfd, addr, 0); 
    return (write(btfd, page_ptr, PAGESIZE)); 
} 

read函数:

int btread(short rrn, BTPAGE *page_ptr) 
{ 
// long lseek(), addr; 
    long addr; 

    addr = (long)rrn * (long)PAGESIZE + HEADERSIZE; 
    lseek(btfd, addr, 0); 
    return (read(btfd, page_ptr, PAGESIZE)); 
} 

这里是BTPAGE的定义:

typedef struct { 
    short keycount;    /* number of keys in page */ 
    int key[MAXKEYS];    /* the actual keys  */ 
    short child[MAXKEYS+1];  /* ptrs to rrns of descendants */ 
} BTPAGE; 
+0

需要更多的细节,尤其是'BTPAGE'。 – 2010-05-09 00:24:34

+0

我会借此机会插入Google的协议缓冲区:http://code.google.com/apis/protocolbuffers/ – Stephen 2010-05-09 00:49:24

+0

编写检查二进制文件格式的工具是否足够,或者您是否需要查看它来自作家计划? – Stephen 2010-05-09 00:52:09

回答

1

在C++中,一个重载流插入操作符添加到BTPAGE类。你读了BTPage后,添加以下内容:

cout << *page_ptr << endl; 

否则,你将不得不编辑你的问题更多的细节你在找什么。例如:

  1. 要读取的数据是 1和0的输出吗?
  2. 你想要逐字节转储吗?

另外,请提供BTPAGE的声明。

+0

我不想看到二进制文件,我希望在将它们转换为二进制文件并写入磁盘之前查看实际值。 – neuromancer 2010-05-09 01:32:48