char [] 和char *可以转换吗?

albert_skynet 2008-06-18 08:14:11
char ss7Temp[3]={0};
char ss7Temp1[3]={0};

ifstream inf;
inf.open("20080201100830.dat");  //二进制文件,文件第一字节为aa
inf.read((char*)&ss7Temp,1);
sprintf(ss7Temp1,"%02x ", (*((char*)&ss7Temp))&0xff);

RichEdit1->Lines->Add(ss7Temp1); //RichEdit1显示为aa

int ret=strcmp(ss7Temp1,"aa");
if(ret==0)
RichEdit1->Lines->Add("right");
else
RichEdit1->Lines->Add(ret); //RichEdit1显示为32

运行以后RichEdit1的结果为:
aa
32
如何可以让strcmp(ss7Temp1,"aa");相等?
...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 2008-06-18
  • 打赏
  • 举报
回复
if(ss7Temp[0] & oxff == 0xaa)
//把要比較的內容整理出來,明確就行了。轉換實在是多此一舉。
& oxff 按位與 0xff .... 值沒改,什麼意義呀。
mimong_lin 2008-06-18
  • 打赏
  • 举报
回复
另外,
inf.read((char*)&ss7Temp,1);
sprintf(ss7Temp1,"%02x ", (*((char*)&ss7Temp))&0xff);

没必要进行类型的转换,
inf.read(ss7Temp,1);
sprintf(ss7Temp1,"%02x ", ss7Temp[0]&0xff);
这样更容易读.
albert_skynet 2008-06-18
  • 打赏
  • 举报
回复
inf.read((char*)&ss7Temp,1); //二进制文件,文件第一字节为aa
if(ss7Temp[0] == 0xaa) //直接作比較就可,何必化成字符串再比較呢。
比较二进制,可是这个条件不是想等的
mimong_lin 2008-06-18
  • 打赏
  • 举报
回复

char ss7Temp[3]={0};
char ss7Temp1[3]={0};

char * pTemp = "aa";
ss7Temp[0] = 'a';
ss7Temp[1] = 'a';

if(strcmp(ss7Temp, pTemp) == 0)
{
printf("相等");
}
else
{
printf("不相等");
}


我这边的结果是相等.
勉励前行 2008-06-18
  • 打赏
  • 举报
回复
sprintf(ss7Temp1,"%02x ", (*((char*)&ss7Temp))&0xff);

這裡 ,"%02x ", 02x後多了一個空格(ASC碼:32),導致 strcmp 比較時不等而返回 32 .
如果只比較兩個字符,可用 strncmp ;

這個例子可以直接用二進制比較的呀,

inf.read((char*)&ss7Temp,1); //二进制文件,文件第一字节为aa
if(ss7Temp[0] == 0xaa) //直接作比較就可,何必化成字符串再比較呢。


jacknes009 2008-06-18
  • 打赏
  • 举报
回复
不相等吧,,有个结束符的
albert_skynet 2008-06-18
  • 打赏
  • 举报
回复
有什么办法让{'a','a'}和"aa"相等吗?
过客猫2022 2008-06-18
  • 打赏
  • 举报
回复
一般情况下char[]和char *都是表示一个字符串的地址,但前一个是常量,后一个是变量。也就是说,你定义char[]地址是不可以改变的。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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