- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以下代码在 iOS 8 上运行良好,但在 iOS 9.0.2 上运行时我得到一些奇怪的结果:
NSString * input = @"Hi there";
NSData * data = [input dataUsingEncoding:NSASCIIStringEncoding];
Byte *byteData = (Byte*)malloc(data.length);
memcpy(byteData, [data bytes], data.length);
NSString * result = [NSString stringWithCString:(const char*)byteData encoding:NSASCIIStringEncoding];
NSLog(@"Result: %@", result);
iOS 8.4 (iPhone 6 Plus) byteData
是Hi there
iOS 9.0.2 (iPhone 6S) byteData
是Hi there\xb6<M\x13
在 iOS 9 上,我最终在字符串末尾加载了一堆垃圾。
这感觉像是 32 位与 64 位的问题,因为在 iOS 9 上字节数据长度看起来是原来的两倍?
Apple 在这里有他们的 32 到 64 位变化表: https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Major64-BitChanges/Major64-BitChanges.html
data.length
是一个 unsigned long long
.这会在 malloc
时返回不同的长度吗?叫做?上面的代码返回 8
对于 data.length
在每个版本的 iOS 上运行时。
这感觉很奇怪,我已经用尽了攻击它的角度。希望外面的人能够阐明这一点。
谢谢!
更新
我可以用
修复它NSString * result = [[NSString alloc] initWithBytes:byteData length:data.length encoding:NSASCIIStringEncoding];
但我仍然想知道为什么我在两个 iOS 版本上得到不同的结果
NSString * result = [NSString stringWithCString:(const char*)byteData encoding:NSASCIIStringEncoding];
最佳答案
“C 字符串”以 NUL 字节结尾。由于您使用 dataUsingEncoding:
创建了 data
,因此 data
不包含 C 字符串。
由于 stringWithCString:encoding:
正在读取有效内存之外的内容(寻找 NUL 终止符),因此行为未定义,因此可以随时更改。
使用 cStringUsingEncoding:
来创建 data
,您将获得所需的 NUL 终止符。
关于ios - -[NSString dataUsingEncoding :] gives garbage at end of string in iOS 9, 不是 iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287801/
我目前正在和提出这个问题的人一起开发一个应用程序:Post request always wrapped by optional text他负责 iOS 部分的编程,我负责 Android 部分的编程
我将 NSString 转换为 NSData 以便通过 JSON 进行解析,但出现以下错误。 Terminating app due to uncaught exception 'NSInvalidA
我正在从 NSString 创建一个 CSV 文件,如下所示: NSData *csvFile = [csvString dataUsingEncoding:NSUTF8StringEncoding]
谁能帮我说说错误是什么原因? [NSNull dataUsingEncoding:]: unrecognized selector sent to instance 我被困在 iOS 应用程序的打印机
我见过两种组成HTTP body的方法。 第一个是: let url = NSURL(string: "http://example.com") let request = NSMutableURL
我正在使用 NSMutableURLRequest。在将参数发送到服务器时,我必须对其进行编码,因此我使用 dataUsingEncoding(NSUTF8StringEncoding) Swift
当我将 NSString 转换为 NSData 并返回时,我得到零结果 NSString * test = @"Wft0r3qkzXd5TDBeCahUB3MtHuc8Axwr"; NSData *
以下代码在 iOS 8 上运行良好,但在 iOS 9.0.2 上运行时我得到一些奇怪的结果: NSString * input = @"Hi there"; NSData * data = [inpu
我有一些像这样的 Objective-C++ 代码: // header @interface MyObjcClass - (void) myMethod: (NSString *) text; @e
我是一名优秀的程序员,十分优秀!