字符串提取数据并转换

HelegeHeHeha 2018-05-04 09:43:59
我有十字节的数据,比如:01 84 04 00 00 00 9c 27 6D 51,这是一组字符串,我需要把第7位的9c和第8位的27提取出来高低位转换组成279c这种十六进制形式的数据并转化成10进制的数显示,有没有大佬指点下
...全文
421 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhagoodwell 2018-05-04
  • 打赏
  • 举报
回复
如果是每两个非空格字符当做一个数,那么你用getchar写个函数~当录入连续两个非空格字符就存入下一个字符数组,如果是空格直接跳过
zhagoodwell 2018-05-04
  • 打赏
  • 举报
回复
引用 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 解释成一个数还是多个数?
HelegeHeHeha 2018-05-04
  • 打赏
  • 举报
回复
引用 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]是被认为是字符串呀,能直接计算然后输出吗
自信男孩 2018-05-04
  • 打赏
  • 举报
回复
引用 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进制形式。 既然都是数,为啥不可以计算呢?
zhagoodwell 2018-05-04
  • 打赏
  • 举报
回复
引用 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)即可
HelegeHeHeha 2018-05-04
  • 打赏
  • 举报
回复
引用 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这种字符串,这个怎么提呢,而且数据是随机的,
自信男孩 2018-05-04
  • 打赏
  • 举报
回复
应该是第7字节吧,不是第7位。位和字节不是一个概念。 如果确定将第7个字节和第8个字节取出来,然后组成一个新的数据。 可以考虑
unsigned int num = buf[7];
num = (num << 8) + buf[6];
在内存中只有2进制表示,没有十进制,十六进制之分。 如果以%d输出是十进制形式,如果是以%x或%X输出是16进制形式。
zhagoodwell 2018-05-04
  • 打赏
  • 举报
回复
也可以用sscnf函数 然后是%x格式 sscanf具体用法可以去网上找
HelegeHeHeha 2018-05-04
  • 打赏
  • 举报
回复
引用 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); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可
我这组数据是随机的也能用吗
zhagoodwell 2018-05-04
  • 打赏
  • 举报
回复
字符串查找 空格键 得到每个空格的下标 我有个函数: 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); 空格和字符之间有对应关系 然后 你需要第几个就找到第几个空格的下标 接下来 替换高低位 并进行进制转换即可

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧