在VC中如何以十六进制的形式显示一个大小不定的字符串?

c3primer 2004-05-05 02:20:55
例如:字符串为:abcd 显示结果为:61 62 63 64
...全文
121 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
QunKangLi 2004-05-12
不循环,岂有此理!顺序操作难道总耗时会少么?

输出十六进制字符用%x/%X格式化操作符,sprint家族或CString::Format()等都可以用.

格式化花不了多少时间的!想更高效直接查表输出,这是个小测试程序:
#include <iostream>
#include <assert.h>
using namespace std ;
#include <windows.h>

void init_table() ;
void format( char *pszOutput, const char *pszInput ) ;
main()
{
char a[1024] ;
const char * const b = "tes taidc" ;
init_table() ;
format( a, b ) ;
cout<< a << endl ;
return 1;
}
static char g_szTable[256][4] ;
void init_table()
{
for( int i = 0 ; i < 256 ; ++ i )
sprintf( g_szTable[i], "%02X ", i ) ;
}
void format( char *pszOutput, const char *pszInput )
{
assert( pszOutput && pszInput ) ;
while( *pszInput ) {
memcpy( pszOutput, g_szTable[*pszInput++], 4 ) ;//32位机处理4字节是最快速的,故连最后的字串结束符一起复制
pszOutput += 3 ;
}
}


  • 打赏
  • 举报
回复
yfxclijun 2004-05-12
大家来看看
  • 打赏
  • 举报
回复
c3primer 2004-05-11
0a70: 98 9A 8E 7D 3F 23 43 5A 7B 9D;
0a80: 34 2E 8E 7D 3F B4 43 C3 3C B1;
0a90:.....
0b00:.....
做成这种效果,很常见的
大家来帮帮忙
分不够再加。。。
  • 打赏
  • 举报
回复
c3primer 2004-05-06
UP
  • 打赏
  • 举报
回复
c3primer 2004-05-05
第一:处理的数据量很大,而且每次的数据大小不一
第二:循环耗时太大

请大家帮帮忙,一定有很好的格式化方法的
  • 打赏
  • 举报
回复
菜牛 2004-05-05
为什么不能使用循环?
  • 打赏
  • 举报
回复
c3primer 2004-05-05
UP
请教
  • 打赏
  • 举报
回复
c3primer 2004-05-05
更准确地说应该是这样的:将一串数据(长度不定)的每个字节都以十六进制显示
不能使用循环
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-05 02:20
社区公告

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