【发布时间】:2022-01-10 11:37:32
【问题描述】:
我在 Objective-C 中有一个 NSData,NSData 的值为 0x10,代码如下:
@implementation BufUtil
+ (NSData *_Nonnull) getOCBuf {
std::vector<uint8_t> sendData = {0x10};
NSData * reqBuf = [[NSData alloc] initWithBytesNoCopy:sendData.data() length:sendData.size() freeWhenDone:false];
NSLog(@"getOCBuf, oc NSData reqBuf:%@", reqBuf);
return reqBuf;
}
@end
然后我在Swift中使用数据,Swift自动将Objective-C NSData转换为Swift Data,但是奇怪的事情发生了,Swift Data中的值是0x60,代码如下:
public func getOCBuf() -> Data {
let data = BufUtil.getOCBuf();
print("getOCBuf: swift data: \(data.hexEncodedString())")
return data
}
日志是这样的:
getOCBuf, oc NSData reqBuf:{length = 1, bytes = 0x10}
getOCBuf: swift data: 60
现在我对发生的事情感到困惑。为什么0x10变成0x60,这两个数不是二进制补码。
谁能帮帮我,谢谢。
【问题讨论】:
-
std::vector 似乎比 Objective-C 更 C++。这可能是问题所在。您可以在此post 中找到有用的信息
标签: ios swift objective-c nsdata language-interoperability