问一个十easy的问题?

vcmfc 2000-12-13 03:38:00
我这段代码错误在哪里?
char* szdata=(char*)malloc(nDataLen*10);
memset(szdata,0,nDataLen*10);
sprintf(szData,"%X",pData);//出错,说什么String!=NULL
声明:pData为加密后的字符串指针,不为空!
...全文
340 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxbyl 2000-12-14
  • 打赏
  • 举报
回复
一次性转换的函数应该没有
woodheart 2000-12-14
  • 打赏
  • 举报
回复
咦,我的感觉是sprintf(p1,"&X",&p)得到的是内容
sprintf(p1,"%X",p)是得到地址

vcmfc,俺帮不上忙了
vcmfc 2000-12-14
  • 打赏
  • 举报
回复
谢谢大家的指正,我改用如下:
char p[]="abc";
char *p1=(char*)malloc(6);
memset(p1,0,6);
sprintf(p1,"%X",p[0]);此时得到a的16进制61。
若如此的话,我不是要一个一个来,有没有一次性转换成的函数?

vcmfc 2000-12-14
  • 打赏
  • 举报
回复
我再试一下!
vcbear 2000-12-14
  • 打赏
  • 举报
回复
&p是指针的指针。sxbyl的话是对的。在编译时这个指针的存放地址就应该定了,当然指针本身
的值可以变。
sprintf(p1,"%X",p)得到的是这个指针当时的值。如果要得到它指想的内容,得用 "%s"
至于sprint的值不一样,我没法重现。我得到的是一样的.可能是vcmfc没有把注释掉的语句贴上来。
vcmfc,不妨long ll = (long)&p;然后sprint( ll) 和k.Format(ll)看看是不是一样。
sxbyl 2000-12-14
  • 打赏
  • 举报
回复
难道是我理解错了?
sprintf((p1,"%X",&p)得到的是存放p这个变量的地址,是一个常数,在编译时已固定好了(着句话是否有错误,有待搞手确认)
sprintf(p1,"%X",p)得到的是p中存放的内容,即一个内存地址
vcmfc 2000-12-14
  • 打赏
  • 举报
回复
to vcbear:谢谢你的参与,不过我发现以下问题,看以下我的代码:
char *p="abc";
char *p1=(char*)malloc(6);
memset(p1,0,6);
sprintf(p1,"%X",&p);//如果以下两句注释掉的号,p="12F1DC",如果有以下两句p="12F1D0"
//如果改为sprintf(p1,"%X",p),p为指针的地址
CString k;
k.Format("%X",&p);//不管如何,k="12F1D0"
//一样,k.Format("%X",p)后,p为指针的地址,两者一样。
AfxMessageBox(p1);
为何sprintf取得值会不一样呀!,是BUG吗?,请高手解惑!
vcmfc 2000-12-14
  • 打赏
  • 举报
回复
各位兄弟,帮我看一下我的这个问题呀!
http://www.csdn.net/expert/TopicView.asp?id=47260
vcbear 2000-12-14
  • 打赏
  • 举报
回复
加密都作乐,就不要偷懒转换几个字符了吧。
vcbear 2000-12-13
  • 打赏
  • 举报
回复
不过我的意思是:

sprintf(Buffer,"%x",pData) // pData= 0x11223344;
Buffer ="11223344".

这个意思,就是把pData按一个Long的数字格式化了。
vcbear 2000-12-13
  • 打赏
  • 举报
回复
很简单呀,得到指针就用指针取值。对你不是问题吧。

BYTE bt = (BYTE)*(pData+i);i++;
vcmfc 2000-12-13
  • 打赏
  • 举报
回复
to vcbear:如果得到是指针的值,应该如何得到其内容值呢?
vcmfc 2000-12-13
  • 打赏
  • 举报
回复
嘿嘿~~,俺还有N000分呢?,对了,我问这个问题的主要原因是我在进行字符串加密,在转换到OLECHAR时有部分字符没有UNICODE,老是出错,所以想到在转换前把字符变成16进制,在转换成UNICODE,所以在使用sprinf时出错了,不过字符转换我已经找到解决方法了,就很简单,不使用MDBCS,直接使用UNICODE就没有问题了,可这让我搞了N天,问了N个人都没有有办法。对了,对于你所说的,如果使用CString.Format(),是可以的,不会加空格的,这个还得讨论一下,就是怪,明天使用MFC来测试?,谁还有高见。
sxbyl 2000-12-13
  • 打赏
  • 举报
回复
vcmfc兄是不是前一阵子问COM已经倾家荡产了?:)
如vcbear所说,如果你想以16进制看最后结果,一个字符需两个字节,再加一个空格作为分隔符,则你需要分配nDataLen*30个字节内存,来个循环,每次都将"%X ",*pData的结果加到szData结尾。不知你是不是这个意思?但怎么我总觉着今天用的这个方法怎么好像不好呢?:(
vcbear 2000-12-13
  • 打赏
  • 举报
回复
网络老出问题,说话老有回音,sorry
vcbear 2000-12-13
  • 打赏
  • 举报
回复
不太懂也。如果你用%x格式化,得到的是pData指针的值。
具体错误信息是什么?
vcbear 2000-12-13
  • 打赏
  • 举报
回复
不太懂也。如果你用%x格式化,得到的是pData指针的值。
具体错误信息是什么?

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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