一个转换的问题!(高手请进)

keen_2000_0 2005-03-22 10:16:53
如果有一个数组char arry[20]="abcdefg",我想把它转换成一个short data[]的数组,并且data中的数据是16进制的数据,比如arry中的内容转换得到是data[]={0x6162,0x6364,0x6566,0x6700}.
注:1.0x6162就代表了"ab",因为char占用一个byte,short占用2个byte;
2.通过以下语句实现ASCII码向数字的转化,比如:a的ASCII码是0x61,通过以下语句可以得到 first_bit4_l=1,first_bit4_h=6.
for(i=0;i<20;i++)
{ temp1=arry[i];
first_bit4_l=temp1&0x0f;
first_bit4_h=temp1>>4;

if ((first_bit4_h>=0)&&(first_bit4_h<=9))
{
first_bit4_h=first_bit4_h+48;
}

if ((first_bit4_h>=0xA)&&(first_bit4_h<=0xF))
{
first_bit4_h=first_bit4_h+55;
}

if ((first_bit4_l>=0)&&(first_bit4_l<=9))
{
first_bit4_l=first_bit4_l+48;
}

if ((first_bit4_l>=0xA)&&(first_bit4_l<=0xF))
{
first_bit4_l=first_bit4_l+55;
}

temp1=(first_bit4_h<<4)|first_bit4_l;
}
最后,我是想问,c语言里面不通过文件操作,怎样把first_bit4_l和first_bit4_h送到数组data里面去,得到data[]={0x6162,0x6364,0x6566,0x6700}.关键是我自己不知道怎样搞定0x6162这个格式,请高手帮忙!急等!
...全文
165 点赞 收藏 5
写回复
5 条回复
TangChin 2005年03月22日

楼主,是一样的啊。
data[]中存储的就是0x6162 0x6364 ....
回复 点赞
keen_2000_0 2005年03月22日
谢谢liujingfu123(Oh_My_GoD) 和pcboyxhy还有点请问pcboyxhy,你得到的这个(short)data[]数组中的内容在内存中和data[]={0x6162,0x6364,0x6566,0x6700}是一样的么?我觉得(short)data[]中的数据是
{6162,6364,6566,6700}不知道我理解的对不对。
回复 点赞
pcboyxhy 2005年03月22日
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char arry[20]="abcdefg";
short data[20], tmp;
int len = strlen(arry), n=len;
memset(data, 0, 40);
memcpy(data, arry, len);
int i;
char *p=data;
for(i=0; i<len; i+=2)
{
tmp = p[i+1];
p[i+1] = p[i];
p[i] = tmp;
}
len >>= 1;
if(n%2) ++len;
for(i=0; i<len; ++i)
printf("0x%x ", (short)data[i]);
system("PAUSE");
return 0;
}

是这个功能吗?
回复 点赞
healer_kx 2005年03月22日
yuncai/
回复 点赞
liujingfu123 2005年03月22日
你原来的数组是字符类型的,要转换成short类型的,应该是一个short类型的元素就由原来的两个char类型的元素构成吧?你上面程序的意思好象不太对哦,你里面的几个if语句的判断我不太记得对不对,但好象你的处理方法有点不对,我作如下修改,只供参考:

定义你的两个char类型的变量:char first_bit4_l, first_bit4_h;

for(i=0,j=0;i<20;i += 2, j++)
{
first_bit4_h=arry[i];
first_bit4_l=arry[i+1];

if ((first_bit4_h>=0)&&(first_bit4_h<=9))
{
first_bit4_h=first_bit4_h+48;
}
//在if前面加上一个else,少了else就不对哦,因为只能满足一种情况
//少了else的话,那你判断前一种情况又会去判断后一种情况!!!
else if ((first_bit4_h>=0xA)&&(first_bit4_h<=0xF))
{
first_bit4_h=first_bit4_h+55;
}

if ((first_bit4_l>=0)&&(first_bit4_l<=9))
{
first_bit4_l=first_bit4_l+48;
}
//在if前面加上一个else,少了else就不对哦,因为只能满足一种情况
//少了else的话,那你判断前一种情况又会去判断后一种情况!!!
else if ((first_bit4_l>=0xA)&&(first_bit4_l<=0xF))
{
first_bit4_l=first_bit4_l+55;
}

//下面语句把它们两个拼成data[]数组的一个元素
data[j] = (first_bit4_h << 8)|first_bit4_l;

//temp1=(first_bit4_h<<4)|first_bit4_l;
}
你的data[]数组本来就是short类型的,实际上你只是在arry[]数组里面取两个元素,然后拼成data[]里面的一个元素就ok了啊。。。。。。 你用以下语句打印一下看看,是不是符合你的要求!
for(i = 0; i < 10; i++)
printf("--- data[i] = %0x04x ---\n",data[i]);
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告