| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1078 人关注过本帖
标题:新手,字符串比较问题
只看楼主 加入收藏
sikolee
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-7-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
新手,字符串比较问题
程序代码:
  int n;
  char buf[10];
  FILE *sf;
  sf=fopen("hrandsh.dump","rb");
  fseek(sf,1,0);
  n=fread(buf,sizeof(char),2,sf);
1、打开了一个二进制文件,取出两个字节,如果buf所指的值用16进制表示是9843,我想把buf和"9843"作比较,该怎么写呢?
2、如何把这个二进制里的所有数据用汉字、字母等等其他字符表示出来呢?
谢谢
搜索更多相关主题的帖子: 字符串 二进制 
2013-07-24 10:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不懂你说什么

授人以渔,不授人以鱼。
2013-07-24 10:23
sikolee
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-7-23
收藏
得分:0 
以下是引用TonyDeng在2013-7-24 10:23:50的发言:

不懂你说什么
程序代码:
  int n;
  char buf[10];
  FILE *sf;
  int i;
  sf=fopen("hrandsh.dump","rb");
  fseek(sf,1,0);
  n=fread(buf,sizeof(char),2,sf);
  for(i=0;i<n;i++)
  {
  printf("%02x",buf[i]);
  }
比如如上输出的值是9843。现在我想在这段代码中判断buf是不是“9843”该怎么写?
2013-07-24 10:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
直接整数比较咯,buf[0]是否0x98,buf[1]是否0x43。

授人以渔,不授人以鱼。
2013-07-24 10:44
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
收藏
得分:0 
if(strcmp(buf,"9843")==0)
printf("they are the same");
2013-07-24 10:46
sikolee
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-7-23
收藏
得分:0 
以下是引用TonyDeng在2013-7-24 10:44:38的发言:

直接整数比较咯,buf[0]是否0x98,buf[1]是否0x43。

非常感谢版主。你说的办法我照做实现了。

可不可以把buf当成一个字符串直接和9843直接比较呢?

16进制为什么要用整数比较,而不能当做字符串比较呢?比如(buf[0]="0x98")。这部分知识需要看什么材料才能了解?

麻烦版主。新手,希望您能指点一下。

2013-07-24 11:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你读入的本来就是整数啊,buf是一个数据缓冲区,不是字符串(没有用'\0'结束的就不是字符串)。你看自己输出数据的格式,"%02x",不管数据是字符还是整数(其实字符就是整数),你都已经要求printf()用十六进制的格式输出了,你看到的是十六进制整数的结果,那么比较自然也要用十六进制整数去比较。

要用字符串,首先确保你读入的数据是字符串格式(自己加'\0'结束符),然后与字符串"\x98\x43"比较。

授人以渔,不授人以鱼。
2013-07-24 11:08
sikolee
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-7-23
收藏
得分:0 
以下是引用TonyDeng在2013-7-24 11:08:41的发言:

你读入的本来就是整数啊,buf是一个数据缓冲区,不是字符串(没有用'\0'结束的就不是字符串)。你看自己输出数据的格式,"%02x",不管数据是字符还是整数(其实字符就是整数),你都已经要求printf()用十六进制的格式输出了,你看到的是十六进制整数的结果,那么比较自然也要用十六进制整数去比较。

要用字符串,首先确保你读入的数据是字符串格式(自己加'\0'结束符),然后与字符串"\x98\x43"比较。

谢谢斑竹,理解了你说的这段话。

那怎么能把buf变成字符串(9843)呢?想了半天没想出来。


[ 本帖最后由 sikolee 于 2013-7-25 10:24 编辑 ]
2013-07-25 09:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
先把数组buf用'\0'初始化填充了,然后读入数据。

授人以渔,不授人以鱼。
2013-07-25 10:58
sikolee
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-7-23
收藏
得分:0 
以下是引用TonyDeng在2013-7-25 10:58:37的发言:

先把数组buf用'\0'初始化填充了,然后读入数据。
程序代码:
void main(int argc,char**argv)

 {
  int n;
  char buf[3];
  FILE *sf;
  int i;
  sf=fopen("hrandsh.dump","rb");
  fseek(sf,5,0);
  n=fread(buf,sizeof(char),2,sf);
  for(i=0;i<n;i++)
  {
   printf("%02x",buf[i]);
  }
  fclose(sf);
  printf("\n%s\n",buf);

 }

输出结果如下:
504f   --16进制
PO     --字符
我是想把buf以16进制读出来作为一个字符串来另外一个字符串作比较,比如:
if (strcmp(buf的16进制,"504f")==0)
如何实现这个?

我按你说的初始化用'\0'填充,还是如上结果:
char buf[3]="\0"

麻烦了斑竹



2013-07-25 14:16
快速回复:新手,字符串比较问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026784 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved