我需要幫助從一些之一的從紅寶石以下代碼行轉換成QT C++:我不得不從紅寶石一行轉換爲Qt的C++
KEY =%(重量)(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00).map {| s | ('C *')
我需要幫助從一些之一的從紅寶石以下代碼行轉換成QT C++:我不得不從紅寶石一行轉換爲Qt的C++
KEY =%(重量)(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00).map {| s | ('C *')
QByteArray key = QByteArray::fromHex(QByteArray("30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00").replace(' ', QString()));
快速的解釋:
QByteArray("30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00")
創建臨時的QByteArray與密鑰字符串
.replace(' ', QString())
刪除臨時QByteArray中的所有空間,所以它僅包含字符0..F
QByteArray::fromHex()
將十六進制編碼的QByteArray轉換爲包含無符號8位整數的QByteArray(即, C++字符類型)。這意味着它需要從原始QByteArray(例如「41」)每對十六進制數字並將其轉換爲整數(「41」將轉換爲65 = 4 * 16 + 1)並將此值附加到新的QByteArray中。
如果你需要key作爲「const char *」,你可以使用QByteArray :: constData()方法,但是你必須記住,只有當原QByteArray有效時,這個方法返回的指針纔有效來自文檔:「只要字節數組不重新分配或銷燬」)。因此,如果您需要存儲關鍵數據,請將其保存爲QByteArray或複製由constData()返回的const char *。
char KEY[] = {
48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0
};
結果稍微有些不同,一個平面的字節值數組。當然可以使用來創建1個字符的字符串對象引用數組,但它不可能有用。
這裏的Ruby代碼做什麼:
["30", "81", "9F", ... "8D", "00" ]
。[48, 129, 159, ... 141, 0]
Array#pack
打開陣列分爲無符號的8位整數的一個單一的二進制字符串。如果一個簡單的C數組會做:
unsigned char KEY[22] = { 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06... };
如果你需要的QByteArray:
QByteArray KEY("\x30\x81\x9F\x30\x0D\x06...", 22);
你知道Ruby或Qt的C++?你有什麼麻煩? – Phrogz 2011-02-08 21:21:24
我比紅寶石更瞭解qt C++。但我不知道如何做這部分=>使用Array#pack將數組轉換爲無符號8位整數的二進制字符串。 – defiant 2011-02-09 10:15:26