我想在斯威夫特實現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