【问题标题】:Converting NSString into uint8_t将 NSString 转换为 uint8_t
【发布时间】:2011-01-24 13:09:07
【问题描述】:

我正在研究 Apple 在“证书、密钥和信任编程指南”中提供的数据加密示例代码。用于加密/解密数据的示例代码考虑了uint8_t。然而,现实世界的应用程序将在 NSString 对象上执行此操作。我一直在尝试将NSString 对象转换为uint8_t,但每次尝试都会收到编译器警告。各种论坛中给出的“几乎”相同问题的解决方案似乎对我不起作用。

【问题讨论】:

  • 向我们展示您尝试过但“几乎”不起作用的代码。

标签: ios objective-c


【解决方案1】:

这是将任何字符串值转换为uint8_t* 的示例。最简单的方法是将 NSData 的字节转换为 uint8_t*。其他选择是分配内存并复制字节,但您仍然需要以某种方式跟踪长度。

NSData *someData = [@"SOME STRING VALUE" dataUsingEncoding:NSUTF8StringEncoding];
const void *bytes = [someData bytes];
int length = [someData length];

//Easy way
uint8_t *crypto_data = (uint8_t*)bytes;

可选方式

//If you plan on using crypto_data as a class variable
// you will need to do a memcpy since the NSData someData
// will get autoreleased
crypto_data = malloc(length);
memcpy(crypto_data, bytes, length);
//work with crypto_data

//free crypto_data most likely in dealloc
free(crypto_data);

【讨论】:

    【解决方案2】:
    NSString *stringToEncrypt = @"SOME STRING VALUE";
    uint8_t *cString = (uint8_t *)stringToEncrypt.UTF8String;
    

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多