如何访问字符串中的特定位域范围

时间:2014-10-19 23:47:16

标签: c string byte

例如,假设我有:

uint8_t version = 1;
uint16_t type = 1;
uint32_t program = 0;

我将版本,类型和程序转换为字符串,然后我将它们全部存储在:

char *string;

如何访问字符串的前8位以获取版本变量,然后将其转换回整数?然后是接下来的16位类型,并将其转换为int,然后访问程序的下一个32位(4字节)并将其转换为int。

由于

2 个答案:

答案 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指针)。