如何显示一组viod类型数据,有详细代码

牛耳朵 2008-12-29 09:46:10

char msg1[1024]={0};
unsigned int i;
for(i=0;i<=520;i++)
{
msg1[i] = ((char*)(BIR.Data))[i]; //BIR.Data是viod类型的指针,长度为520个字节
}

str.Format(_T("%s"), (char*)(BIR.BiometricData.Data));
CString sMsg1 (str);
((CListBox*)GetDlgItem(IDC_LIST_BIR))->AddString(sMsg1);



我的思路如上述代码。貌似不正确。
请各位指教。
...全文
253 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛耳朵 2008-12-30
  • 打赏
  • 举报
回复

char msg1[1024]={0};
unsigned int i;

for(i=0;i<520;i++)
{
sprintf(&msg1[i],"%02x",((char*)(BIR.Data))[i]);//BIR.Data是viod类型的指针,指向的数据长度为520个字节
}
CString sMsg1 (msg1);
MessageBox(sMsg1,NULL,MB_ICONASTERISK);
((CListBox*)GetDlgItem(IDC_LIST_BIR))->AddString(sMsg1);//现在走到这步出问题了,编译是可以通过的
fibbery 2008-12-29
  • 打赏
  • 举报
回复
转成16进制不用教吧,输出ASCII建议小于32和大于126用点(.)来代替,这个转换也不难。
就呆在云上 2008-12-29
  • 打赏
  • 举报
回复
    short msg1[512]={0};    
unsigned int i;
for(i=0;i<=512;i++)
{
msg1[i] = (short)(*((char *)BIR.Data+2*i))<<8 + *((char *)BIR.Data+2*i+1); //BIR.Data是viod类型的指针,长度为520个字节
}
str.Format(_T("%s"), (char*)(BIR.BiometricData.Data));
CString sMsg1 (str);
((CListBox*)GetDlgItem(IDC_LIST_BIR))->AddString(sMsg1);
就呆在云上 2008-12-29
  • 打赏
  • 举报
回复


那你用char[1024]干什么啊?
直接short[512]就是了萨
牛耳朵 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fibbery 的回复:]
对于这块内存区域的数据如何展示,一般应该显示其16进制内容,也可以想一般的二进制文本编辑器一样显示其16进制内容的同时显示ASCII字符。例如:UltraEdit
[/Quote]

就是这个思路,但是我不是很明代代码怎么写。请指教
牛耳朵 2008-12-29
  • 打赏
  • 举报
回复
我目的是想把这个void的指针指的内容,以16进制显示出来。

上面我好像表达错了://BIR.Data是viod类型的指针,指针指向的数据长度为520个字节
就呆在云上 2008-12-29
  • 打赏
  • 举报
回复


这样就没有问题了,你给char赋值应该要解引用的,如下:
	char msg1[1024]={0};    
unsigned int i;
for(i=0;i<=520;i++)
{
msg1[i] = *((char *)BIR.Data+i); //BIR.Data是viod类型的指针,长度为520个字节
}
str.Format(_T("%s"), (char*)(BIR.BiometricData.Data));
CString sMsg1 (str);
((CListBox*)GetDlgItem(IDC_LIST_BIR))->AddString(sMsg1);
就呆在云上 2008-12-29
  • 打赏
  • 举报
回复

是void还是void×?
void会有东西?
xiaoyisnail 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oyljerry 的回复:]
memcpy(msg1, BIR.Data, 520);
[/Quote]

up

这样不管你什么类型都把数据原样复制过去了
healer_kx 2008-12-29
  • 打赏
  • 举报
回复
void是 无类型。。。
fibbery 2008-12-29
  • 打赏
  • 举报
回复
对于这块内存区域的数据如何展示,一般应该显示其16进制内容,也可以想一般的二进制文本编辑器一样显示其16进制内容的同时显示ASCII字符。例如:UltraEdit
fibbery 2008-12-29
  • 打赏
  • 举报
回复
这有一个错误:
for(i=0;i<=520;i++)
如果长度是520那么i应该小于520而不能等于520,否则就越界了。
hhyttppd 2008-12-29
  • 打赏
  • 举报
回复
呵呵,十六进制?
oyljerry 2008-12-29
  • 打赏
  • 举报
回复
memcpy(msg1, BIR.Data, 520);
yellowhwb 2008-12-29
  • 打赏
  • 举报
回复
如果我写,我会这样写,呵呵:)

unsigned char msg1[1024]={0};
unsigned int i;
unsigned char* pData = (unsigned char*)BIR.Data;
for(i=0;i<=520;i++)
{
msg1[i] = pData[i]; //BIR.Data是viod类型的指针,长度为520个字节
}
Leejun527 2008-12-29
  • 打赏
  • 举报
回复
msg1[i] = ((char*)(BIR.Data))[i];
//你BIR.Data指向的一定是字符类数据么?如果是非字符类呢?不就变乱码了?
wiowei 2008-12-29
  • 打赏
  • 举报
回复
如果是输出指针指向的16进制数据,直接memcpy不就行了?
另外lz代码中i<=520越界了吧,应是i<520
测试代码:

void* test = new char[520];
unsigned char msg1[520];
memcpy(msg1, test, 520);
for(int i = 0;i < 520;i++)
cout<<hex<<(int)msg1[i]<<endl;
delete[] test;
waizqfor 2008-12-29
  • 打赏
  • 举报
回复

char msg1[1024]={0};
unsigned int i;
for(i=0;i<=520;i++)
{
msg1[i] = ((char*)(BIR.Data))[i]; //BIR.Data是viod类型的指针,长度为520个字节
}


有点迷糊 520够用了 定义那么大数组为什么
yc406740872 2008-12-29
  • 打赏
  • 举报
回复
首先你要定义指针,不然str不能直接引用其他的方法或变量
比如,你可以先char *str=msqr;
然后str就可以直接指向了

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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