在C中解析字符串或其他数据类型

在C中解析字符串或其他数据类型,c,C,如果我将缓冲区的内容读入一个字符串,我如何在C中解析它 比方说,我希望以以下格式解析字符串: 将前16位存储为整数, 将下一个32位存储在另一个整数中, 将剩余的字符串数据存储为十六进制。基本上,您需要以下内容(不要忘记验证) int first=(文本[0]假设: int1&int2整数与缓冲区中的整数是相同的尾数。 s对齐可能无法满足int需要 #include <stdint.h> void codeara_parse(const char *s, int16_t *int1,

如果我将缓冲区的内容读入一个字符串,我如何在C中解析它

比方说,我希望以以下格式解析字符串:

将前16位存储为整数, 将下一个32位存储在另一个整数中,
将剩余的字符串数据存储为十六进制。

基本上,您需要以下内容(不要忘记验证)

int first=(文本[0]假设:
int1
&
int2
整数与缓冲区中的整数是相同的尾数。
s
对齐可能无法满足
int
需要

#include <stdint.h>
void codeara_parse(const char *s, int16_t *int1, int32_t *int2, int8_t **rest) {
  memcpy(int1, &s[0]           , sizeof *int1);
  memcpy(int2, &s[sizeof *int1], sizeof *int2);
  *rest = &s[sizeof *int1 + sizeof *int2];
}
#包括
void codera_parse(常量字符*s、int16_t*int1、int32_t*int2、int8_t**rest){
memcpy(int1,&s[0],大小为*int1);
memcpy(int2,&s[sizeof*int1],sizeof*int2);
*rest=&s[sizeof*int1+sizeof*int2];
}

否则,OP需要指定缓冲区的尾数。

您是指可读字符串,还是指以16位整数开头,后跟32位整数的内存块,等等?如果是前者,则显示您的字符串格式它是一个内存块,前16位为整数,后32位为另一个整数,其余位为整数字符串为十六进制值。C中的所有“字符串”都以
\0
结尾。这意味着前6个字节可能不包含
\0
,否则字符串太短。您是否打算不允许包含
\0
的整数值?好的,除非它是人类可读的,否则通常不称为字符串(ASCII或其他编码)。这是一个二进制缓冲区。下一个问题是:它使用的是什么endianness?@无用的C字符串是以第一个空字符结尾的连续字符序列。人的可读性和编码不是一个因素。但我当然同意这篇文章缺少明确的目标。你忘了提到这是用于big endian进程的只有教授。
#include <stdint.h>
void codeara_parse(const char *s, int16_t *int1, int32_t *int2, int8_t **rest) {
  memcpy(int1, &s[0]           , sizeof *int1);
  memcpy(int2, &s[sizeof *int1], sizeof *int2);
  *rest = &s[sizeof *int1 + sizeof *int2];
}