Я должен конвертировать одну строку из ruby ​​в Qt C ++ - PullRequest
0 голосов
/ 09 февраля 2011

Мне нужна помощь кого-то, чтобы преобразовать следующую строку кода из ruby ​​в qt c ++:

KEY =% w (30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 0500 03 81 8D 00) .map {| s |s.hex} .pack ( 'С *')

Ответы [ 4 ]

2 голосов
/ 09 февраля 2011

Если подойдет простой массив C:

unsigned char KEY[22] = { 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06... };

Если вам нужен QByteArray:

QByteArray KEY("\x30\x81\x9F\x30\x0D\x06...", 22);
2 голосов
/ 09 февраля 2011

Вот что делает код Ruby:

  1. Создать массив строк, ["30", "81", "9F", ... "8D", "00" ].
  2. Преобразовать каждую шестнадцатеричную строку в массиве в целое число: [48, 129, 159, ... 141, 0]
  3. Используйте Array#pack, чтобы превратить массив в одну двоичную строку из 8-разрядных целых чисел без знака.
1 голос
/ 09 февраля 2011
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 в QByteArray, содержащий 8-разрядные целые числа без знака (то есть тип символа C ++). Это означает, что он берет каждую пару шестнадцатеричных цифр из исходного QByteArray (например, «41») и преобразует его в целое число («41» будет преобразовано в 65 = 4 * 16 + 1) и добавляет это значение в новый QByteArray.

Если вам нужен ключ как "const char *", вы можете использовать метод QByteArray :: constData (), но вы должны помнить, что указатель, возвращаемый этим методом, действителен только до тех пор, пока действительный исходный QByteArray (цитата из документация: «пока байтовый массив не перераспределен или уничтожен»). Поэтому, если вам нужно сохранить данные ключа, сохраните их как QByteArray или сделайте копию const char *, возвращаемого constData ().

1 голос
/ 09 февраля 2011
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-символьной строки, но это вряд ли будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...