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]
)
}
}
我是 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]
)
}
}