簡體   English   中英

如何將 Objective-C NSData 轉換為 Swift 數據?

[英]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 ,這兩個數字不是二進制補碼。

誰能幫幫我,謝謝。

編碼:
https://github.com/oncealong/SwiftOcDataConvert

這是我的錯。

我從 stackoverflow 復制代碼“如何從 std::vector 轉換為 NSData”,但代碼使用[NSData alloc] initWithBytesNoCopy ,這導致了這一切。

在 getOCBuf 函數返回后,與 std::vector 關聯的內存已釋放。 但 oc NSData 和 swift 數據不知道。 它使用原始地址並找到不同的值。

老實說,應用程序應該崩潰,並給出原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM