【问题标题】:Convert unsigned char* to NSData and vice-versa in Objective-C在 Objective-C 中将 unsigned char* 转换为 NSData,反之亦然
【发布时间】:2022-01-09 16:32:40
【问题描述】:

只想用objective-c把NSData转成Byte,把Byte转成NSData

    unsigned char* dataToByteArray = (unsigned char*) [data bytes];
    NSLog(@"Bytes is %@", dataToByteArray);
    
    NSData *datas = [NSData dataWithBytes:&dataToByteArray length:sizeof(dataToByteArray)];
    NSLog(@"Data is like%@", datas);
    NSLog(@"After convert bytes is %@", dataToByteArray)

【问题讨论】:

    标签: ios objective-c nsdata unsigned


    【解决方案1】:

    两件事:

    传递缓冲区,不是指向缓冲区的指针,length是指缓冲区中的元素个数,而不是缓冲区指针的大小:

    [NSData dataWithBytes:dataToByteArray length:[data length]]
    

    sizeof(dataToByteArray) 变成指针的大小 - 8 个字节。初始化器想知道缓冲区中有多少元素。

    另外,%@ 仅用于记录 Objective-C 对象。 unsigned char * 是 C 缓冲区,而不是 Objective-C 对象。 (你不能用一个“%something”直接记录一个 C 缓冲区,因为指针不包含足够的信息,例如,有多少元素以及何时停止记录。它也可以是一个指向单个unsigned char。但您可以使用%p 记录指针,NSLog(@"first byte: %c", dataToByteArray[0]) 记录第一个字节等)

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 2011-07-27
      • 1970-01-01
      • 2020-02-19
      相关资源
      最近更新 更多