user-0 提问: 字符串提取数据并转换

回复:
user: user-1
content: 如果是每两个非空格字符当做一个数，那么你用getchar写个函数～当录入连续两个非空格字符就存入下一个字符数组，如果是空格直接跳过

user: user-1
content: 引用 6 楼 HelegeHeHeha的回复:[quote=引用 4 楼 zhagoodwell 的回复:] [quote=引用 2 楼 HelegeHeHeha的回复:][quote=引用 1 楼 zhagoodwell 的回复:] 字符串查找 空格键 得到每个空格的下标 我有个函数： int BF(char a[],char b[],int c[])//a为主串 b为次串 c[]存储匹配的下标 函数返回 匹配的个数    {                              int i=0,j=0,k=0;          do{             if (b[j]&&a[i++]==b[j])++j;             else             {                 b[j]?(i-=j):(c[k++]=i-j);                  j=0;                         }         }while(a[i-1]);           return k;     }     函数调用：BF("AB 57 79 73 "," ",C); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可 我这组数据是随机的也能用吗[/quote] 只要你是这种 16进制与空格相间的 比如你这个是 01 84 04 00 00 00 9c 27 6D 51 只要调用 BF(" 01 84 04 00 00 00 9c 27 6D 51"," ",C)即可[/quote] 我刚看了一下，我得到的数据是0184040000009c276D51这种字符串，这个怎么提呢，而且数据是随机的，[/quote] 你把 0184040000009c276D51 解释成一个数还是多个数？

user: user-0
content: 引用 3 楼 cfjtaishan 的回复:应该是第7字节吧，不是第7位。位和字节不是一个概念。 如果确定将第7个字节和第8个字节取出来，然后组成一个新的数据。 可以考虑  unsigned int num = buf[7]; num = (num << 8) + buf[6]; 在内存中只有2进制表示，没有十进制，十六进制之分。 如果以%d输出是十进制形式，如果是以%x或%X输出是16进制形式。 buf[6]和buf[7]是被认为是字符串呀，能直接计算然后输出吗

user: user-2
content: 引用 7 楼 HelegeHeHeha 的回复:[quote=引用 3 楼 cfjtaishan 的回复:] 应该是第7字节吧，不是第7位。位和字节不是一个概念。 如果确定将第7个字节和第8个字节取出来，然后组成一个新的数据。 可以考虑  unsigned int num = buf[7]; num = (num << 8) + buf[6]; 在内存中只有2进制表示，没有十进制，十六进制之分。 如果以%d输出是十进制形式，如果是以%x或%X输出是16进制形式。 buf[6]和buf[7]是被认为是字符串呀，能直接计算然后输出吗 [/quote] 这有什么不可? 字符串中的每个字符也是有自己数值的，不论是啥，在内存里只有一种表示：2进制形式。 既然都是数，为啥不可以计算呢？

user: user-1
content: 引用 2 楼 HelegeHeHeha的回复:[quote=引用 1 楼 zhagoodwell 的回复:] 字符串查找 空格键 得到每个空格的下标 我有个函数： int BF(char a[],char b[],int c[])//a为主串 b为次串 c[]存储匹配的下标 函数返回 匹配的个数    {                              int i=0,j=0,k=0;          do{             if (b[j]&&a[i++]==b[j])++j;             else             {                 b[j]?(i-=j):(c[k++]=i-j);                  j=0;                         }         }while(a[i-1]);           return k;     }     函数调用：BF("AB 57 79 73 "," ",C); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可 我这组数据是随机的也能用吗[/quote] 只要你是这种 16进制与空格相间的 比如你这个是 01 84 04 00 00 00 9c 27 6D 51 只要调用 BF(" 01 84 04 00 00 00 9c 27 6D 51"," ",C)即可

user: user-0
content: 引用 4 楼 zhagoodwell 的回复:[quote=引用 2 楼 HelegeHeHeha的回复:][quote=引用 1 楼 zhagoodwell 的回复:] 字符串查找 空格键 得到每个空格的下标 我有个函数： int BF(char a[],char b[],int c[])//a为主串 b为次串 c[]存储匹配的下标 函数返回 匹配的个数    {                              int i=0,j=0,k=0;          do{             if (b[j]&&a[i++]==b[j])++j;             else             {                 b[j]?(i-=j):(c[k++]=i-j);                  j=0;                         }         }while(a[i-1]);           return k;     }     函数调用：BF("AB 57 79 73 "," ",C); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可 我这组数据是随机的也能用吗[/quote] 只要你是这种 16进制与空格相间的 比如你这个是 01 84 04 00 00 00 9c 27 6D 51 只要调用 BF(" 01 84 04 00 00 00 9c 27 6D 51"," ",C)即可[/quote] 我刚看了一下，我得到的数据是0184040000009c276D51这种字符串，这个怎么提呢，而且数据是随机的，

user: user-2
content: 应该是第7字节吧，不是第7位。位和字节不是一个概念。 如果确定将第7个字节和第8个字节取出来，然后组成一个新的数据。 可以考虑  unsigned int num = buf[7]; num = (num << 8) + buf[6]; 在内存中只有2进制表示，没有十进制，十六进制之分。 如果以%d输出是十进制形式，如果是以%x或%X输出是16进制形式。

user: user-1
content: 也可以用sscnf函数 然后是%x格式 sscanf具体用法可以去网上找

user: user-0
content: 引用 1 楼 zhagoodwell 的回复:字符串查找 空格键 得到每个空格的下标 我有个函数： int BF(char a[],char b[],int c[])//a为主串 b为次串 c[]存储匹配的下标 函数返回 匹配的个数    {                              int i=0,j=0,k=0;          do{             if (b[j]&&a[i++]==b[j])++j;             else             {                 b[j]?(i-=j):(c[k++]=i-j);                  j=0;                         }         }while(a[i-1]);           return k;     }     函数调用：BF("AB 57 79 73 "," ",C); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可 我这组数据是随机的也能用吗

user: user-1
content: 字符串查找 空格键 得到每个空格的下标 我有个函数： int BF(char a[],char b[],int c[])//a为主串 b为次串 c[]存储匹配的下标 函数返回 匹配的个数    {                              int i=0,j=0,k=0;          do{             if (b[j]&&a[i++]==b[j])++j;             else             {                 b[j]?(i-=j):(c[k++]=i-j);                  j=0;                         }         }while(a[i-1]);           return k;     }     函数调用：BF("AB 57 79 73 "," ",C); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可