如何将指定长度的char转换为cstring

心疼包 2014-08-13 03:32:40
我要调用setwindowtext显示char型数组里的165个值,以十六进制的方式显示
现在遇到两个问题:1.因为char数组中有很多0值,我怎么把它全部转换为cstring。
2.如何以十六进制显示,我显示出来是字符形式的。
求指导啊!!

...全文
293 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-08-14
  • 打赏
  • 举报
回复
引用 12 楼 u014371234 的回复:
我用的是editview类视图。不算是控件吧。
editview类视图 属于控件视图,内部包含一个Edit 控件 其实只要 插入换行,editview缺省应该就显示换行了,注意下格式就行了
  • 打赏
  • 举报
回复
引用 12 楼 u014371234 的回复:
[quote=引用 11 楼 zjq9931 的回复:] [quote=引用 9 楼 u014371234 的回复:] [quote=引用 7 楼 zjq9931 的回复:] [quote=引用 4 楼 u014371234 的回复:] [quote=引用 2 楼 modyaj 的回复:] strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊![/quote] 强制转换成unsigned char[/quote] 那setwindowtext时怎么换行呢?[/quote] \r\n就是换行符,当然控件里面,要选上支持换行的属性,一般是multi……line之类的属性。[/quote] 我用的是editview类视图。不算是控件吧。[/quote] 不算。
心疼包 2014-08-13
  • 打赏
  • 举报
回复
引用 11 楼 zjq9931 的回复:
[quote=引用 9 楼 u014371234 的回复:] [quote=引用 7 楼 zjq9931 的回复:] [quote=引用 4 楼 u014371234 的回复:] [quote=引用 2 楼 modyaj 的回复:] strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊![/quote] 强制转换成unsigned char[/quote] 那setwindowtext时怎么换行呢?[/quote] \r\n就是换行符,当然控件里面,要选上支持换行的属性,一般是multi……line之类的属性。[/quote] 我用的是editview类视图。不算是控件吧。
  • 打赏
  • 举报
回复
引用 9 楼 u014371234 的回复:
[quote=引用 7 楼 zjq9931 的回复:] [quote=引用 4 楼 u014371234 的回复:] [quote=引用 2 楼 modyaj 的回复:] strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊![/quote] 强制转换成unsigned char[/quote] 那setwindowtext时怎么换行呢?[/quote] \r\n就是换行符,当然控件里面,要选上支持换行的属性,一般是multi……line之类的属性。
赵4老师 2014-08-13
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <string.h>
FILE *f;
char buffer[4096];
int r,a;
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
int main(int argc,char **argv) {
    if (argc<2) {
        fprintf(stderr,"Usage: %s filename.ext\n",argv[0]);
        return 2;
    }
    f=fopen(argv[1],"rb");
    if (NULL==f) {
        fprintf(stderr,"Can not open file [%s]!\n",argv[1]);
        return 1;
    }
    a=0;
    while (1) {
        r=fread(buffer,1,4096,f);
        HexDump(buffer,r,a);
        a+=r;
        if (r<4096) break;
    }
    fclose(f);
    return 0;
}
心疼包 2014-08-13
  • 打赏
  • 举报
回复
引用 7 楼 zjq9931 的回复:
[quote=引用 4 楼 u014371234 的回复:] [quote=引用 2 楼 modyaj 的回复:] strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊![/quote] 强制转换成unsigned char[/quote] 那setwindowtext时怎么换行呢?
modyaj 2014-08-13
  • 打赏
  • 举报
回复
引用 4 楼 u014371234 的回复:
[quote=引用 2 楼 modyaj 的回复:] strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊![/quote] 你是怎么弄出来这么一长串的!%02X 截断
  • 打赏
  • 举报
回复
引用 4 楼 u014371234 的回复:
[quote=引用 2 楼 modyaj 的回复:] strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊![/quote] 强制转换成unsigned char
心疼包 2014-08-13
  • 打赏
  • 举报
回复
引用 1 楼 modyaj 的回复:
1.CString 变量直接等于数组变量名:Cstr = Arraych 2.可以这样

      char ach[] = {0x11,0x12,0x13,0x14};
	CString strc ;
	strc.Format(TEXT("%02X"),ach);
	GetDlgItem(IDC_EDIT1)->SetWindowText(strc);
你这样只能转换一个,得循环,刚学到的,嘿嘿
心疼包 2014-08-13
  • 打赏
  • 举报
回复
引用 3 楼 modyaj 的回复:
循环
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊
心疼包 2014-08-13
  • 打赏
  • 举报
回复
引用 2 楼 modyaj 的回复:
strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
那我现在显示出来了,可是显示的是fffffff4,八个,我只想要两位f4,怎么办,而且setwindowtext中怎么换行?显示出来好长啊……求指导啊!
modyaj 2014-08-13
  • 打赏
  • 举报
回复
循环
modyaj 2014-08-13
  • 打赏
  • 举报
回复
strc.Format(TEXT("%02X"),ach[i]);一次只能处理一个字符,然后训话处理,再拼接起来
modyaj 2014-08-13
  • 打赏
  • 举报
回复
1.CString 变量直接等于数组变量名:Cstr = Arraych 2.可以这样

      char ach[] = {0x11,0x12,0x13,0x14};
	CString strc ;
	strc.Format(TEXT("%02X"),ach);
	GetDlgItem(IDC_EDIT1)->SetWindowText(strc);

64,676

社区成员

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

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