Если вы хотите встроить 16-разрядное целое число 500
в качестве двоичных данных в конец строки, вы можете использовать необработанные шестнадцатеричные байты:
/* Little-endian unsigned 16-bit integer with the value 500 */
#define SAMPLING_FREQUENCY "\xf4\x01"
Осторожно, но порядком байтов является архитектуразависимый, поэтому вы можете захотеть добавить дополнительный макрос для правильного упорядочения байтов в зависимости от архитектуры:
#ifdef ... /* little endian */
#define BYTES2(a,b) b a
#else ... /* big endian */
#define BYTES2(a,b) a b
#endif
#define SAMPLING_FREQUENCY BYTES16("x01", "\xf4")
РЕДАКТИРОВАТЬ: Если вы хотите, чтобы число читалось человеком, выне может иметь его во время компиляции (по крайней мере, в C), но вы можете инициализировать его во время выполнения:
#define SVN_REVISION "1143"
#define SERIAL_NUMBER "PST3201109270001"
#pragma pack(push, 1)
union {
struct {
char svn_rev_serial[20];
uint16_t freq;
char nul;
};
char general_info[23];
} u = {{
SVN_REVISION SERIAL_NUMBER,
500,
'\0'
}};
#pragma pack(pop)
При этом используются более нестандартные (но хорошо поддерживаемые) конструкции, такие как #pragma pack
и писать одному члену профсоюза и читать другому.