例如,假设我有:
uint8_t version = 1;
uint16_t type = 1;
uint32_t program = 0;
我将版本,类型和程序转换为字符串,然后我将它们全部存储在:
char *string;
如何访问字符串的前8位以获取版本变量,然后将其转换回整数?然后是接下来的16位类型,并将其转换为int,然后访问程序的下一个32位(4字节)并将其转换为int。
由于
答案 0 :(得分:1)
你可以这样做:
struct {
uint8_t version;
uint16_t type;
uint32_t program;
} header;
memcpy(&header, data, sizeof(header));
这假定data
是通过将struct
相同的header
数据复制到一个字符数组中而产生的。如果您需要与其他类型的硬件进行互操作,请使用htonl/ntohl
组中的功能进行转换。发件人调用htonl
转换为网络订单,接收方调用ntohl
转换为其特定于硬件的订单。
答案 1 :(得分:0)
您可以使用void
指针执行此操作:
void *ptr = str;
uint8_t version = *(uint8_t*)ptr;
ptr = *(uint8_t*)ptr + 1;
uint16_t type = *(uint16_t*)ptr;
ptr = *(uint16_t*)ptr + 1;
uint16_t program = *(uint16_t*)ptr;
ptr = *(uint16_t*)ptr + 1;
将此变量写入char* string
,您可以以相同的方式执行(使用void指针)。