Преобразование между прямым порядком байтов и большим порядком байтов, хранящихся в std :: vector - PullRequest
0 голосов
/ 09 мая 2020

В настоящее время я использую вектор uint8_t для представления некоторых двоичных данных. Иногда я также использую этот формат для отправки по сети целых, длинных и некоторых других типов. И хотя я могу использовать

__builtin_bswap16(littleEndianValue);
__builtin_bswap32(littleEndianValue);
__builtin_bswap64(littleEndianValue);

или

htonl

, мне любопытно, есть ли какие-либо недостатки использования метода std::reverse вектора, то есть вот так:

std::reverse(std::begin(theVectorBuffer), std::end(theVectorBuffer));

, так как это не требует от меня

  1. извлечения фактического значения целых чисел из вектора
  2. apply __builtin_bswap32
  3. возвращая эти целые числа обратно в вектор

В основном я пытаюсь сохранить некоторые вызовы конструктора, а также некоторые выделения памяти. Я еще не проверял это решение, но я надеялся, что кто-то сможет придумать причину, по которой , а не , использовать метод std::reverse и остановить меня от совершения глупостей. Боюсь, что это будет иметь негативный эффект в будущем, который я пока не могу предсказать. Я готов использовать метод std::reverse только в тех частях кода, где мне известен тип и длина вектора (например, при удержании uint64_t). Эти векторы используются позже для объединения и отправки по сети в TCP-соединении.

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