这个库实现了对DBF文件的基本读写操作,支持整数、浮点数、字符串、逻辑型字段,使用也很方便,但是在字节序为Big-Endian的机器上(如HP-UX IA64)不能正确的读写数据,因此,对存在不兼容的地方进行了修改。

1.对于要存储在文件中的16位,32位的整数,使用下面的函数进行转换。
uint32 BigLittleSwap32(uint32 A)
{
    // 或者__ia64
    #ifdef __hpux
    return ((((uint32)(A)& 0xff000000) >> 24) | \
            (((uint32)(A)& 0x00ff0000) >> 8)  | \
            (((uint32)(A)& 0x0000ff00) << 8)  | \
            (((uint32)(A)& 0x000000ff) << 24) );
    #else
        return A;
    #endif
}

uint16 BigLittleSwap16(uint16 A)
{
    #ifdef __hpux
    return  ((((uint16)(A)& 0xff00) >> 8) | \
             (((uint16)(A)& 0x00ff) << 8) );
    #else
        return A;
    #endif
}
2.对于整数型的字段,在函数ConvertStringToInt中使用了下面的代码:
#ifdef __hpux
    for( int i = 0 ; i < nSize ; i++ )
    {
        cRecord[i] = u.n[nSize - i - 1];
    }
#else
    for( int i = 0 ; i < nSize ; i++ )
    {
        cRecord[i] = u.n[i];
    }
#endif
修改后的代码:点击下载 dbf.zip
原始版本:https://github.com/rostafichuk/DBFEngine 

本文链接地址: 一个DBF文件读写库的使用及其在Big-Endian机器上的修改
http://qingfengju.com/index.asp?id=373

分类:Win32/C++ 查看次数:3878 发布时间:2014-5-8 18:02:46