gpt4 book ai didi

ios - iOS 和 OSX 文件字符的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:45:19 25 4
gpt4 key购买 nike

我有一些代码,我试图在 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;
}

最佳答案

对于 iOS 应用程序,Xcode 构建过程将对 PNG 文件运行 pngcrush 以针对设备的显卡优化它们。这涉及插入一个额外的 PNG block 、剥离 zlib header 和校验和、从 RGB 到 BGR 的字节交换以及预乘 alpha 值。

尝试重命名您的图像以使用“.dat”扩展名,看看您是否会得到不同的结果。您还可以使用“压缩 PNG 文件”build设置在目标或项目级别禁用此功能:

enter image description here

关于ios - iOS 和 OSX 文件字符的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com