新人救助~~怎么把十六进制数转成ASCII码?

baili_yu 2015-02-05 10:44:26
比如有一个长度为3的数组,里面分别是AC,34,2A,我要怎么把它们变成A C 3 4 2 A,然后再分别转成ASCII码?。
因为是新手,我也不懂怎么表述,请前辈指点~~
...全文
134 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
灌水号 2015-02-26
  • 打赏
  • 举报
回复
引用 5 楼 baili_yu 的回复:
[quote=引用 4 楼 u014444402 的回复:]


unsigned char dat[] = { 0xac, 0x34, 0x2a };
#define LENGTH (sizeof(dat)/sizeof(dat[0]))
unsigned char str[LENGTH * 2 + 1];
int main(int argc, char* argv[])
{
	unsigned char index = 0;
	unsigned char i;
    unsigned char temp;
	for ( i=0; i<LENGTH; i++ )
	{

		temp = (dat[i] >> 4) & 0xf;//高4位
        if ( temp > 9 ) temp = temp - 0xa+ 'a';// 字母
        else   temp = temp + '0';//数字
		str[index++] = temp;

		temp = dat[i] & 0xf;//低4位
        if ( temp > 9 ) temp = temp - 0xa+ 'a';// 字母
        else   temp = temp  + '0';//数字
		str[index++] = temp;
		
	}

	str[index] = 0;

	printf( "%s\r\n", str );
	return 0;
}

谢谢,中间的一段对我很有用,我能不能再问一下,如果用函数调用的方式写,该怎么写?unsigned char dat[] = { 0xac, 0x34, 0x2a }; #define LENGTH (sizeof(dat)/sizeof(dat[0])) unsigned char str[LENGTH * 2 + 1];也不能写在前面,应该怎么弄?。[/quote] 定义一个buffer的问题,把长度传过去就OK.
baili_yu 2015-02-06
  • 打赏
  • 举报
回复
引用 4 楼 u014444402 的回复:


unsigned char dat[] = { 0xac, 0x34, 0x2a };
#define LENGTH (sizeof(dat)/sizeof(dat[0]))
unsigned char str[LENGTH * 2 + 1];
int main(int argc, char* argv[])
{
	unsigned char index = 0;
	unsigned char i;
    unsigned char temp;
	for ( i=0; i<LENGTH; i++ )
	{

		temp = (dat[i] >> 4) & 0xf;//高4位
        if ( temp > 9 ) temp = temp - 0xa+ 'a';// 字母
        else   temp = temp + '0';//数字
		str[index++] = temp;

		temp = dat[i] & 0xf;//低4位
        if ( temp > 9 ) temp = temp - 0xa+ 'a';// 字母
        else   temp = temp  + '0';//数字
		str[index++] = temp;
		
	}

	str[index] = 0;

	printf( "%s\r\n", str );
	return 0;
}

谢谢,中间的一段对我很有用,我能不能再问一下,如果用函数调用的方式写,该怎么写?unsigned char dat[] = { 0xac, 0x34, 0x2a }; #define LENGTH (sizeof(dat)/sizeof(dat[0])) unsigned char str[LENGTH * 2 + 1];也不能写在前面,应该怎么弄?。
灌水号 2015-02-05
  • 打赏
  • 举报
回复


unsigned char dat[] = { 0xac, 0x34, 0x2a };
#define LENGTH (sizeof(dat)/sizeof(dat[0]))
unsigned char str[LENGTH * 2 + 1];
int main(int argc, char* argv[])
{
	unsigned char index = 0;
	unsigned char i;
    unsigned char temp;
	for ( i=0; i<LENGTH; i++ )
	{

		temp = (dat[i] >> 4) & 0xf;//高4位
        if ( temp > 9 ) temp = temp - 0xa+ 'a';// 字母
        else   temp = temp + '0';//数字
		str[index++] = temp;

		temp = dat[i] & 0xf;//低4位
        if ( temp > 9 ) temp = temp - 0xa+ 'a';// 字母
        else   temp = temp  + '0';//数字
		str[index++] = temp;
		
	}

	str[index] = 0;

	printf( "%s\r\n", str );
	return 0;
}

baili_yu 2015-02-05
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
#include <stdio.h>
char a[3]={0xAC,0x34,0x2A};
char s[7];
int i;
int main() {
 for (i=0;i<3;i++) sprintf(s+i*2,"%02X",(unsigned char)a[i]);
 for (i=0;i<6;i++) printf("%c %3d\n",s[i],(unsigned char)s[i]);
 return 0;
}
谢谢,不过我不能直接用printf,应该怎么用赋值的方式,把a[3]里的数放到s[7]里? 而且如果长度不知道,应该怎么算长度?sizeof()这样可以么?
baili_yu 2015-02-05
  • 打赏
  • 举报
回复
谢谢,不过我不能直接用printf,应该怎么用赋值的方式,把a[3]里的数放到s[7]里? 而且如果长度不知道,应该怎么算长度?sizeof()这样可以么?
赵4老师 2015-02-05
  • 打赏
  • 举报
回复
#include <stdio.h>
char a[3]={0xAC,0x34,0x2A};
char s[7];
int i;
int main() {
 for (i=0;i<3;i++) sprintf(s+i*2,"%02X",(unsigned char)a[i]);
 for (i=0;i<6;i++) printf("%c %3d\n",s[i],(unsigned char)s[i]);
 return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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