我有代码我试图在 OSX 和 iOS 上运行,并遇到文件读取问题。我正在尝试在字节级别进行文件比较。
但是,当我在图像文件中读取相同物理偏移量的字符时,使用相同的 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;
}