两字符合并为十六进制
答案:3 悬赏:50
解决时间 2021-03-13 08:36
- 提问者网友:騷女、無惡不作
- 2021-03-12 10:08
如字符为 01 ,十六进制为 0x01
最佳答案
- 二级知识专家网友:冷眼_看世界
- 2021-03-12 10:27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getCharValue(char ch)
{
if(ch >= '0' && ch <= '9')
return ch-'0';
else if(ch >= 'a' && ch <= 'z')
return ch-'a' + 10;
else if(ch >= 'A' && ch <= 'Z')
return ch-'A' + 10;
}
int Merge(char *str_data,int ** merged_data)
{
int str_data_len = strlen(str_data);
int i;
// 字符数为奇数个,不合并
if(str_data_len%2!=0)
{
*merged_data = NULL;
return 0;
}
// 分配空间
*merged_data = (int*)malloc(sizeof(int)*str_data_len/2);
// 两个字符一起合并为一个十六进制数
for(i=0;i<str_data_len;i+=2)
{
(*merged_data)[i/2] = getCharValue(str_data[i])*16 + getCharValue(str_data[i+1]);
}
// 返回合并后得到的十六进制数个数
return str_data_len/2;
}
int main(int argc, char *argv[])
{
char str_data[]="01101699aaBBccDDEEFF";
int *merged_data = NULL;
int merged_data_amount = Merge(str_data,&merged_data);
int i;
if(merged_data)
{
printf("%s = ",str_data);
for(i=0;i<merged_data_amount;i++)
printf("%X ",merged_data[i]);
printf("\n");
// 记得释放空间
free(merged_data);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
int getCharValue(char ch)
{
if(ch >= '0' && ch <= '9')
return ch-'0';
else if(ch >= 'a' && ch <= 'z')
return ch-'a' + 10;
else if(ch >= 'A' && ch <= 'Z')
return ch-'A' + 10;
}
int Merge(char *str_data,int ** merged_data)
{
int str_data_len = strlen(str_data);
int i;
// 字符数为奇数个,不合并
if(str_data_len%2!=0)
{
*merged_data = NULL;
return 0;
}
// 分配空间
*merged_data = (int*)malloc(sizeof(int)*str_data_len/2);
// 两个字符一起合并为一个十六进制数
for(i=0;i<str_data_len;i+=2)
{
(*merged_data)[i/2] = getCharValue(str_data[i])*16 + getCharValue(str_data[i+1]);
}
// 返回合并后得到的十六进制数个数
return str_data_len/2;
}
int main(int argc, char *argv[])
{
char str_data[]="01101699aaBBccDDEEFF";
int *merged_data = NULL;
int merged_data_amount = Merge(str_data,&merged_data);
int i;
if(merged_data)
{
printf("%s = ",str_data);
for(i=0;i<merged_data_amount;i++)
printf("%X ",merged_data[i]);
printf("\n");
// 记得释放空间
free(merged_data);
}
return 0;
}
全部回答
- 1楼网友:而你却相形见绌
- 2021-03-12 12:38
是这个意思么?
#include <stdio.h>
int main()
{
char str[3];
unsigned char ch = 0;
int i;
gets(str);
for (i = 0; i < 2; i++)
{
ch *= 16;
if (str[i] >= '0' && str[i] <= '9')
{
ch += str[i] - '0';
}
else if (str[i] >= 'A' && str[i] <= 'F')
{
ch += str[i] - 'A' + 10;
}
}
printf("0x%x\n", ch);
return 0;
}
- 2楼网友:初心未变
- 2021-03-12 11:36
调用函数 int result= atoi (“01”);
再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯