关于内存字节转换 急在线等

李雷 2008-07-10 01:56:50
已知一个地址的内存是 FF 35 84 32 07 13 44 66 80 12 33 00 14 68 11 ....

是这样的内存 我想memcpy 13个字节然后把这13个字节 转换成字符串 显示到文本上

显示的内容也要是 "FF 35 84 32 07 13 44 66 80 12 33 00 14 68 11"这样的 字节串

找了好久 没找到什么好方法 转换呢
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Clerk_9919 2008-07-11
  • 打赏
  • 举报
回复
楼上的都不错,不过多次调用sprintf之类的函数在效率要求高时可能不太适合.

如果需要提高效率,可以自己实现转换

#include <iostream>

char *pMap = "0123456789ABCDEF";

int main()
{
unsigned char testData[] = {
0xFF, 0x35, 0x84, 0x32, 0x07, 0x13, 0x44, 0x66, 0x80
};

char *pOutput = new char[sizeof(testData)*3];
memset(pOutput, ' ', sizeof(testData)*3);

for ( int i = 0; i < sizeof(testData); i++ ) {
pOutput[i*3] = pMap[(testData[i] >> 4)];
pOutput[i*3+1] = pMap[(testData[i]&0x0F)];
}

pOutput[sizeof(testData)*3-1] = 0;

std::cout << pOutput << std::endl;

delete [] pOutput;

return 0;
}
IsItNothing 2008-07-11
  • 打赏
  • 举报
回复
unsigned char pSource = ...;//指向内存指针
int iMemLen = 13;
unsigned char p = pSource;
char pBuf[1024];
int ilen = 0;
memset(pBuf,0,sizeof(pBuf));

for(int i=0;i<iMemLen;i++)
{
ilen += sprintf(pBuf+ilen," %2x",*p);
p++;
}
printf(pBuf);
不好意思,写错了,惭愧啊,和1搂的一样。
IsItNothing 2008-07-11
  • 打赏
  • 举报
回复
顶上面两位的写法,下面是我自己的:
unsigned char pSource = ...;//指向内存指针
unsigned char p = NULL;
char pBuf[1024];
int ilen = 0;
memset(pBuf,0,sizeof(pBuf));

while(p!=NULL)
{
ilen += sprintf(pBuf+ilen,"%2x",*p);
p++;
}
printf(pBuf);
sunlin7 2008-07-11
  • 打赏
  • 举报
回复
呵呵,上面两位高手已经给出了答案,我这里就占座得分啦。
sunlin7 2008-07-11
  • 打赏
  • 举报
回复
呵呵,上面两位高手已经给出了答案,我这里就占座得分啦。
Clerk_9919 2008-07-11
  • 打赏
  • 举报
回复
奇怪!!为什么没有分??
IsItNothing 2008-07-11
  • 打赏
  • 举报
回复
楼上正解,很规整。
greatws 2008-07-10
  • 打赏
  • 举报
回复
写错了GetLenth ---> GetLength
greatws 2008-07-10
  • 打赏
  • 举报
回复

unsigned char data[]={0xFF,0x35,0x84,0x32,0x07,0x13,0x44,0x66,0x80,0x12,0x33,0x00,0x14,0x68,0x11};
CString temp,str="";
for(int i=0;i<sizeof(data);i++)
{
temp.Format("%02X ",data[i]);
str+=temp;
}
str=str.Left(str.GetLenth()-1);

MessageBox(str);


whatabig 2008-07-10
  • 打赏
  • 举报
回复
char* p=lpMemAddr;
char lpFormat[80]={0};
BYTE numchars=0;
while(numchars<13)
{
wsprintfA(&lpFormat[numchars++],"%02X",*p++);
}
量子高宏亮 2008-07-10
  • 打赏
  • 举报
回复
char buffer[14]="";
char*pSource=xxx;
memcpy(buffer,pSource,13);
CString result="",strTemp="";
for(int i=0;i<13,i++)
{
strTemp.Format("%02X",buffer[i]);
result+=strTemp;
if(i<12) result += " ";
}

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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