我使用的是字节读写方式, 比如说我想现在想使从 文件的 某个字节数据开始读,比如说 文本文件内容如下,我现在想从0x02开始读,请问用CH375ByteLocate如何实现?谢谢 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x25, 0x01, 0x01, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xd8, 0xcf, 0xc2, 0xa3, 0xb1, 0xb3, 0xac, 0xca, 0xd0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xca, 0x25, 0x01, 0x01, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xd8, 0xcf, 0xc2, 0xa3, 0xb1, 0xb3, 0xac, 0xca, 0xd0, 0xa1, 0xa1, 0xa1, 0xa1,
移动文件指针到指定字节处,如 mCmdParam.ByteLocate.mByteOffset = 2; 跳过文件的前2个字节,从0x02开始读; CH375ByteLocate( ); 然后调用CH375ByteRead( )读文件;
不对吧 ?你看看我的做法: mCmdParam.ByteLocate.mByteOffset = 8; /*从第8字节开始读*/ i = CH375ByteLocate( ); mStopIfError( i ); mDelay100mS(); TotalCount = 1000; printf( "´8 zijiekaishidu: \n"); while ( TotalCount ) { if ( TotalCount > MAX_BYTE_IO ) c = MAX_BYTE_IO; else c = TotalCount; mCmdParam.ByteRead.mByteCount = c; i = CH375ByteRead( ); mStopIfError( i ); TotalCount -= mCmdParam.ByteRead.mByteCount; for ( i=0; i!=mCmdParam.ByteRead.mByteCount ; i++ ) { printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); } } 是这样吗 ? 结果如下: 00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00 照你的说法,上边的应该从第8个字节开始读,而 现在的情况是从第8个字符开始读的, 这个怎么解释?谢谢
杂 没人 回复我 呢 ?晕
要看你文件在文本文件里是怎样的情况,要是0x00, 0x00, 0x02, 0x30, 0x00,....... 这种情况的话,就会是你所说的情况,因为"0","x","0","0","和空格都会作为一个字符 存储,这种情况,从0x02,开始读,mCmdParam.ByteLocate.mByteOffset就得移动12
哦,谢谢 ====================== 我又遇到新问题了 ======================= 我现在想把缓冲区中读到的U盘的数据打印出来,可打出来的结果怎么全是 0 ? 程序如下: printf( "Open and read : \n" ); strcpy( mCmdParam.Open.mPathName, "/C51/MY_ADC.TXT" ); i = CH375FileOpen( ); if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { ...... } else if ( i == ERR_SUCCESS ) /*找到文件 */ { printf( "File size = %ld\n", CH375vFileSize ); printf( "Locate tail\n" ); mCmdParam.ByteLocate.mByteOffset = 0x00000030; i = CH375ByteLocate( ); mStopIfError( i ); TotalCount = 2000; //printf( ": \n" ); while ( TotalCount ) { if ( TotalCount > MAX_BYTE_IO ) c = MAX_BYTE_IO; else c = TotalCount; mCmdParam.ByteRead.mByteCount = c; i = CH375ByteRead( ); mStopIfError( i ); TotalCount -= mCmdParam.ByteRead.mByteCount; printf(" 每次要打印的个数:%d\n",mCmdParam.ByteRead.mByteCount); for ( i=0; i!=mCmdParam.ByteRead.mByteCount ; i++ ) { printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); /*显示打印的字符*/ }
文本内容: 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x25, 0x01, 0x01, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xd8, 0xcf, 0xc2, 0xa3, 0xb1, 0xb3, 0xac, 0xca, 0xd0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xca, 0x25, 问题: 1. 打印出来的结果怎么全是 0 ? 2. 如果我想把 上边 这些数按照每四个字符(比如0x01)这种方式读出来 ,再打印出来,如何实现 ?谢谢
有些ASIIC表示的字符是不可见的或是乱码,你不要打印字符,改为打印该字符的ASIIC printf( "%c", mCmdParam.ByteRead.mByteBuffer ); /*显示打印的字符*/ 改为: printf( "%X",(unsigned short) mCmdParam.ByteRead.mByteBuffer[i] ); /*显示打印的字符*/
2. 如果我想把 上边 这些数按照每四个字符(比如0x01)这种方式读出来 ,再打印出来,如何实现 ?谢谢 这个怎么办啊? 给点思路也行 ,谢谢