None 以下函数可以使用使用 Alloc 时提供的参数调用

None of the following functions can be called with the arguments supplied when use Alloc

我是 kotlin 多平台新手 我想将此函数从 objective C 转换为 kotlin

NSString *RCTMD5Hash(NSString *string)
{
  const char *str = string.UTF8String;
  unsigned char result[CC_MD5_DIGEST_LENGTH];
  CC_MD5(str, (CC_LONG)strlen(str), result);

  return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                                    result[0],
                                    result[1],
                                    result[2],
                                    result[3],
                                    result[4],
                                    result[5],
                                    result[6],
                                    result[7],
                                    result[8],
                                    result[9],
                                    result[10],
                                    result[11],
                                    result[12],
                                    result[13],
                                    result[14],
                                    result[15]];
}

我的科特林代码:

    fun md5Hash(key: NSString): String {
        val str = key.UTF8String
        val result = alloc<UByteVar>()
        CC_MD5(str, strlen(str.toString()).toCC_LONG(), result)
        return NSString.stringWithFormat("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0],
            result[1],
            result[2],
            result[3],
            result[4],
            result[5],
            result[6],
            result[7],
            result[8],
            result[9],
            result[10],
            result[11],
            result[12],
            result[13],
            result[14],
            result[15])
    }

我遇到一些无法解决的错误

要在 Kotlin 中分配 C 内存,应该使用 memScoped

在你的情况下你需要分配一个数组,这就是为什么应该使用 allocArray 而不是 alloc:

fun md5Hash(key: NSString): String {
    memScoped {
        val str = key.UTF8String
        val result = allocArray<UByteVar>(CC_MD5_DIGEST_LENGTH)
        CC_MD5(str, strlen(key.toString()).toUInt(), result)
        return NSString.stringWithFormat(
            "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
            result[0],
            result[1],
            result[2],
            result[3],
            result[4],
            result[5],
            result[6],
            result[7],
            result[8],
            result[9],
            result[10],
            result[11],
            result[12],
            result[13],
            result[14],
            result[15]
        )
    }
}