我有一个关于从结构中读取一组字符的小查询。例如:特定变量包含值“3242C976 * 32”(char - 类型)。我怎样才能得到这个变量的前8位。请帮助。
感谢。
编辑: 我正试着读信号:
Ex:$ ASWEER,2,X:3242C976 * 32
进入这个结构:
struct pg
{
char command[7]; // saves as $ASWEER,2,X:3242C976*32
char comma1[1]; // saves as ,2,X:3242C976*32
char groupID[1]; // saves as 2,X:3242C976*32
char comma2[1]; // etc
char handle[2]; // this is the problem, need it to save specifically each part, buts its not
char canID[8];
char checksum[3];
}m_pg;
... 当将缓冲区存储到结构中时,它可以工作,但由于没有回车符,它会在每个char变量中保存其余的信号。所以,最后总会有垃圾。
答案 0 :(得分:3)
float value1 = HexToFloat(m_pg.canID); // find a conversion script for HexToFloat
CString val;
val.Format("0.3f",value1);
垃圾值实际上并没有存储在结构中,它只显示它,因为没有回车符,所以请根据需要格式化消息并使用CString val;
答案 1 :(得分:2)
如果“3242C976 * 3F”是c-string或std :: string,你可以这样做:
char* str = "3242C976*3F";
char first_byte = str[0];
或者使用任意内存块,您可以:
SomeStruct memoryBlock;
char firstByte;
memcpy(&firstByte, &memoryBlock, 1);
同样复制字符串或任意内存块中的前8位或1字节。
答案 2 :(得分:2)
编辑后(下面的原始答案)
只需按部分复制即可。在C中,这样的东西应该可以工作(也可以在C ++中工作,但可能不是惯用的)
strncpy(m_pg.command, value, 7); // m.pg_command[7] = 0; // oops
strncpy(m_pg.comma, value+7, 1); // m.pg_comma[1] = 0; // oops
strncpy(m_pg.groupID, value+8, 1); // m.pg_groupID[1] = 0; // oops
strncpy(m_pg.comma2, value+9, 1); // m.pg_comma2[1] = 0; // oops
// etc
此外,在结构成员中没有字符串终止符的空间(因此上面的oopses)。他们不是字符串。不要printf
他们!
不要读超过8个字符。在C中,类似
char value[9]; /* 8 characters and a 0 terminator */
int ch;
scanf("%8s", value);
/* optionally ignore further input */
while (((ch = getchar()) != '\n') && (ch != EOF)) /* void */;
/* input terminated with ch (either '\n' or EOF) */
我相信上面的代码在C ++中也“有效”,但在该语言中可能不是惯用的
答案 3 :(得分:1)
如果你有一个字符指针,你可以设置str[8] = '\0';
但要小心,因为如果缓冲区小于8(编辑: 9 )字节,这可能会导致问题。
(我只是假设已经持有字符串的变量的名称被称为str
。替换变量的名称。)
答案 4 :(得分:1)
在我看来,你想要用逗号分割,并保存到那里。这可以使用strtok()来完成,根据逗号将字符串拆分为标记,或者使用strchr()查找逗号,使用strcpy()将字符串复制到逗号。