急求大小端转换代码。

u010816608 2013-05-31 05:11:21
要求完成的功能是:第一,有十六进制text形式转换为hex形式时,大小端转换,如123转换为hex形式时313233,那么大小端转换后应该是333231而不是332313 。 写出代码者。。。立刻给分
...全文
376 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010816608 2013-06-03
  • 打赏
  • 举报
回复
还有更好的代码吗?这几个都不行呀,大神进来
yaozhiyong110 2013-06-03
  • 打赏
  • 举报
回复
不就是htonl htons吗... 还有你的313233,换后是333231 而不是332313 这就是你的大小端转换?
u010912594 2013-06-01
  • 打赏
  • 举报
回复
我估计你想输出成字符串,那么用CString的Format("%x", number)把你的数字转换成16进制字符串,然后遍历字符串两个两个的取出组成一个新字符串)即可。注意补零,如果输出的16进制是奇数个,需要先补零再两两取出。
asdjy123 2013-06-01
  • 打赏
  • 举报
回复
main()
{         
    char data[512];
    int len=Str2Hex(m_strSendData,data);
}
//将字符串整理成16进制格式,用 data 参数送出,并返回数据长度
int CModbusSCommDlg::Str2Hex(CString str, unsigned char *data)
{
   
	int t,t1;
	int rlen = 0,len = str.GetLength(); //get total lenght
	for ( int i=0; i<len; )//处理字符串,并且每次循环处理两个不为空的字符
	{
		char l, h = str[ i ];
		if(h==' ')  //去掉字符中的空格
		{
			i++;
			continue;
		}
		i++;
		if( i >= len )
			break;

		l  = str[ i ];
		t  = HexChar( h ); //半字节高位
		t1 = HexChar( l );//半字节低位
		if ( (t==16) || (t1==16) )
			break;
		else 
			t = t1 * 16 + t;
		i++;
		data[rlen] = (unsigned char)t;
		rlen++;
	}
	return rlen;
}
//每个字符逐一转化成16进制
char CModbusSCommDlg::HexChar(char c)
{
	if ( (c>='0') && (c<='9') )
		return c-0x30;

	else if ( (c>='A') && (c<='F') )
		return c-'A'+10;

	else if ( (c>='a') && (c<='f') )
		return c-'a'+10;

	else 
		return 0x10;
}
asdjy123 2013-06-01
  • 打赏
  • 举报
回复
楼主:123怎么转换转换为hex形式时313233?? 我给你个字符串转化为16进行,并大小端变化的代码 main() { char data[512]; int len=Str2Hex(m_strSendData,data); } //将字符串整理成16进制格式,用 data 参数送出,并返回数据长度 int CModbusSCommDlg::Str2Hex(CString str, unsigned char *data) { int t,t1; int rlen = 0,len = str.GetLength(); //get total lenght for ( int i=0; i<len; )//处理字符串,并且每次循环处理两个不为空的字符 { char l, h = str[ i ]; if(h==' ') //去掉字符中的空格 { i++; continue; } i++; if( i >= len ) break; l = str[ i ]; t = HexChar( h ); t1 = HexChar( l ); if ( (t==16) || (t1==16) ) break; else t = t1 * 16 + t; i++; data[rlen] = (unsigned char)t; rlen++; } return rlen; } //每个字符逐一转化成16进制 char CModbusSCommDlg::HexChar(char c) { if ( (c>='0') && (c<='9') ) return c-0x30; else if ( (c>='A') && (c<='F') ) return c-'A'+10; else if ( (c>='a') && (c<='f') ) return c-'a'+10; else return 0x10; }
用户 昵称 2013-06-01
  • 打赏
  • 举报
回复
htonl之类就行吧。

16,472

社区成员

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

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

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