Очень медленная функция

strtol очень медленный для моей программы, и я хочу, чтобы он был очень быстрым

так, например, у меня есть эта строка:

PCHAR ex = "\x55\xEC" etc...

Они шестнадцатеричные, так что если я хочу написать это без "\x", чтобы оно было похоже на "55 EC" и т. Д. Я должен использовать strtol, но strtol чрезвычайно медленный для моей программы, я хочу самый быстрый в моей программе..

I use strtol like (CHAR)strtol(ex, &ex, 16);

Помоги мне, пожалуйста?

2 ответа

Я бы сделал что-то вроде этого:

unsigned long ex[] {0x55, 0xEC};

  for (auto i : ex)
    std::cout << std::hex << i << " ";

Выход: 55 EC

Что ты пытаешься? strtol преобразует строку байта в длинное целое число; когда строка 0x в качестве префикса он обрабатывает строку как шестнадцатеричное число. Не будет конвертировать \x55 в 55, Три ошибки в предположении:

  • Это будет конвертировать 0x55 в 55, Нет, это превратит это в 85 (десятичный)
  • Он преобразует несколько чисел в строку. Нет, он преобразует только одно число в строке в long или же long long)
  • Это займет шестнадцатеричное число формата \x, Нет, это должно быть 0x чтобы он распознал его как шестнадцатеричное значение

То, что у вас есть, не является примером использования strtol совсем. Вам придется вручную сделать преобразование.

Все, что вам нужно, это просто найти-заменить все \x с пробелом и обрезать полученную строку, чтобы сбрить ведущее пространство.

Другие вопросы по тегам