Сохранить целое число, используя символьный указатель

0

У меня есть указатель на символ и вам нужно сохранить 2 байта в памяти с помощью этого указателя. Пробовал это

*dataConfigured =  configuredParameterCount;   
*++dataConfigured =  configuredParameterCount << 8; 

Есть ли лучший код, кроме этого?

  • 0
    используя союз?
  • 2
    какой тип данных dataConfigured и configuredParameterCount
Показать ещё 1 комментарий
Теги:

3 ответа

0
Лучший ответ

Предполагая, что тип configuredParameterCount short (2 байта), вы можете просто сделать это

*((short*)dataConfigured) = configuredParameter;

Но убедитесь, что в буфере, указанном dataConfigured, достаточно места.

Как отметил @Calvin, это может вызвать проблемы на некоторых компьютерных архитектурах (хотя это будет работать на большинстве распространенных, таких как x86 и x64). Но если вы хотите быть на всех архитектурах, memcpy безопаснее (медленнее, но безопаснее).

  • 0
    За исключением того, что это не обязательно немного быстрее. Что если OP использует 8-битный процессор? Вы не можете действительно оптимизировать код без конкретной системы.
  • 0
    Это может нарушить архитектуру, так как выравнивание является критическим (например, SPARC или пользовательский MCU / SoC). Действительно, у gcc есть такое предупреждение.
Показать ещё 1 комментарий
4

Предполагая, что:

char dataConfigured[2];
uint16_t configuredParameterCount = 4711;

ты можешь сделать:

memcpy(dataConfigured, &configuredParameterCount, sizeof(dataConfigured));
0

если у вас есть

char* dataConfigured = ..;
short data = 123;

ты можешь сделать

*((short*)dataConfigured) = data;

Будьте осторожны - вам нужно убедиться, что памяти недостаточно.

  • 0
    За исключением того, что это не обязательно немного быстрее. Что если OP использует 8-битный процессор? Вы не можете действительно оптимизировать код без конкретной системы.
  • 0
    Супер работает отлично :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню