![](/img/trans.png)
[英]How to convert AVAudioPCMBuffer to NSData in Objective-C?
[英]How to convert Objective-C NSData to Swift Data?
我在 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
Then I use the data in Swift, Swift auto convert Objective-C NSData
to Swift Data
, but strange things happen, the value in Swift Data
is 0x60
, code like belows:
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
,這兩個數字不是二進制補碼。
誰能幫幫我,謝謝。
這是我的錯。
我從 stackoverflow 復制代碼“如何從 std::vector 轉換為 NSData”,但代碼使用[NSData alloc] initWithBytesNoCopy
,這導致了這一切。
在 getOCBuf 函數返回后,與 std::vector 關聯的內存已釋放。 但 oc NSData 和 swift 數據不知道。 它使用原始地址並找到不同的值。
老實說,應用程序應該崩潰,並給出原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.