我使用的是字節(jié)讀寫方式, 比如說我想現(xiàn)在想使從 文件的 某個字節(jié)數(shù)據(jù)開始讀,比如說 文本文件內(nèi)容如下,我現(xiàn)在想從0x02開始讀,請問用CH375ByteLocate如何實現(xiàn)?謝謝 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,
移動文件指針到指定字節(jié)處,如 mCmdParam.ByteLocate.mByteOffset = 2; 跳過文件的前2個字節(jié),從0x02開始讀; CH375ByteLocate( ); 然后調(diào)用CH375ByteRead( )讀文件;
不對吧 ?你看看我的做法: mCmdParam.ByteLocate.mByteOffset = 8; /*從第8字節(jié)開始讀*/ 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] ); } } 是這樣嗎 ? 結(jié)果如下: 00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00 照你的說法,上邊的應(yīng)該從第8個字節(jié)開始讀,而 現(xiàn)在的情況是從第8個字符開始讀的, 這個怎么解釋?謝謝
雜 沒人 回復(fù)我 呢 ?暈
要看你文件在文本文件里是怎樣的情況,要是0x00, 0x00, 0x02, 0x30, 0x00,....... 這種情況的話,就會是你所說的情況,因為"0","x","0","0","和空格都會作為一個字符 存儲,這種情況,從0x02,開始讀,mCmdParam.ByteLocate.mByteOffset就得移動12
哦,謝謝 ====================== 我又遇到新問題了 ======================= 我現(xiàn)在想把緩沖區(qū)中讀到的U盤的數(shù)據(jù)打印出來,可打出來的結(jié)果怎么全是 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(" 每次要打印的個數(shù):%d\n",mCmdParam.ByteRead.mByteCount); for ( i=0; i!=mCmdParam.ByteRead.mByteCount ; i++ ) { printf( "%c", mCmdParam.ByteRead.mByteBuffer[i] ); /*顯示打印的字符*/ }
文本內(nè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. 打印出來的結(jié)果怎么全是 0 ? 2. 如果我想把 上邊 這些數(shù)按照每四個字符(比如0x01)這種方式讀出來 ,再打印出來,如何實現(xiàn) ?謝謝
有些ASIIC表示的字符是不可見的或是亂碼,你不要打印字符,改為打印該字符的ASIIC printf( "%c", mCmdParam.ByteRead.mByteBuffer ); /*顯示打印的字符*/ 改為: printf( "%X",(unsigned short) mCmdParam.ByteRead.mByteBuffer[i] ); /*顯示打印的字符*/
2. 如果我想把 上邊 這些數(shù)按照每四個字符(比如0x01)這種方式讀出來 ,再打印出來,如何實現(xiàn) ?謝謝 這個怎么辦??? 給點思路也行 ,謝謝