Учитывая:
uint32_t num = 0x74657374 ;
Тогда:
char str[5] = {0} ;
str[0] = num >> 24 ;
str[1] = (num >> 16) & 0xff ;
str[2] = (num >> 8) & 0xff ;
str[3] = num & 0xff ;
Обращение в байтах может быть ненужным, вы можете просто отменить распаковку, чтобы получить строку за один шаг, когда первый символв LSB:
char str[5] = {0} ;
str[0] = num & 0xff ;
str[1] = (num >> 8) & 0xff ;
str[2] = (num >> 16) & 0xff ;
str[3] = num >> 24 ;
Для особых случаев:
- цель с прямым порядком байтов и первый символ в MSB, или
- aцель с прямым порядком байтов и первый символ в младшем бите,
, затем просто:
char str[5] = {0} ;
memcpy( str, &num, 4 ) ;
Все, что сказано в этом случае, ваше существующее решение более эффективно, чем сравнение строк или памяти,Но опять же, обращение байтов не нужно - просто измените порядок байтов в целом числе и избегайте «магических чисел»:
#define TEST 0x74736574u ; // "tset" ("test" reversed)
...
uint32_t temp = *((u32_t*)p->payload) ;
if( temp == TEST ) ...
Преобразование строк, возможно, остается полезным, если вы хотите вывести строки для отладки иличеловеческое представление.