我想在斯威夫特实现AES 128和最近碰到了一个问题,写斯威夫特字符串到CChar
阵列:行为
let testString = "myTestString"
var keyPtr = [CChar](count: kCCKeySizeAES128 + 1, repeatedValue: 0)
bzero(&keyPtr, strideof(keyPtr.dynamicType))
testString.getCString(&keyPtr, maxLength: strideof(keyPtr.dynamicType), encoding: NSUTF8StringEncoding)
print(keyPtr)
在32位器件( iPad 2的,iPad的4)此记录:
[109, 121, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
而在64位的设备(iPhone 6,MacBook Pro的I7)此日志:
[109, 121, 84, 101, 115, 116, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
64位的情况是正确的结果,而32位的结果不是。
我遇到同样的问题与withCString
,以及:
testString.withCString({
print($0)
})
在32位的设备本记录0x7a992094
而一个64位的设备日志0x00007f853c123760
。
如何在所有体系结构中使getCString
或withCString
的结果相同?这是否与CChar
或不同架构上的阵列大小有关?
是的,很肯定这是它。 'withCString'把我扔掉了,因为我正在打印内存位置,而不是那个内存中的内容。再次感谢。 – JAL