我有代碼我試圖跨OSX和iOS工作,並遇到文件讀取問題。我正在嘗試在字節級進行文件比較。iOS和OSX之間的文件字符差異
但是,當我在圖像文件中的相同物理偏移處讀取字符時,使用相同的PNG圖像文件作爲測試(其他文件類型的問題相同),我得到的返回的字符不同,具體取決於我是否在iOS物理設備(iPhone)或Mac(此類別的模擬器)。
我寫了一些代碼來讀取同一文件中相同偏移量的字符串來驗證這一點。使用下面的代碼,我每次從相同的參考文件讀取一個字節,以創建一個字符串,然後將其與另一個平臺上先前運行的已知值進行比較。
對於文件內的相同輸入偏移,例如 NSString *definedOffsets = @"49510,37559,13642,49652,19950,21652";
即使輸入文件是相同的圖像文件,當我在OSX(或iPhone模擬器)上運行代碼與物理iPhone設備時,我也會得到不同的結果。
任何人都可以解釋爲什麼這是,我怎麼可以編碼呢?
- (NSString *) readCharacters:(NSString *) dataline fromSource:(NSString *)datasource
{
NSString *f=nil;
if ([[NSFileManager defaultManager] fileExistsAtPath:datasource])
{
NSError *error=nil;
//-- Read the image file into an NSData
NSData *databuff = [NSData dataWithContentsOfFile:datasource options:NSDataReadingUncached error:&error];
//-- Read the file offsets to compare
NSArray *d = [dataline componentsSeparatedByString:@","];
//-- Print Logs of inputs
NSLog(@"[readCharacters Offsets]: %@",dataline);
#ifdef IPHONE_PLATFORM
NSLog(@"[readCharacters Offset Count]: %d", d.count);
#else
NSLog(@"[readCharacters Offset Count]: %ld", (unsigned long)d.count);
#endif
//-- Get the characters from file
int8_t oneByte;
int knum;
char na[65];
for (int i=0;i<64;i++)
{
knum = [[d objectAtIndex:i] intValue];
[databuff getBytes:&oneByte range:NSMakeRange(knum, 1)];
na[i] = oneByte;
}
na[64]='\0';
f = [NSString stringWithUTF8String:na];
}
else{
NSLog(@"Cant Find File");
}
//-- Return the String of characters read for later comparison
NSLog(@"[Characters]: %@",f);
return f;
}
那是PNG下載或複製的應用程序的一部分?你說它發生在其他文件類型。它是否發生在純文本文件中? – nschum
有趣的問題。我編輯它以符合一般的堆棧溢出風格,並給我一些標籤,我認爲可能會幫助你獲得更好的答案。如果我歪曲了某些事情,我很抱歉。 –
感謝您的格式幫助。第一個問題發佈.... 是的,該文件是應用程序包(對於這些測試在任何情況下)的一部分,但我在進行比較之前將它從包中複製到文檔中,所以我可以更好地匹配OSX端。沒有嘗試過文本文件,因爲我們使用的大多數文件都是二進制文件。 – Flybar