c++从屏幕输入16进制字符串怎么存到数组里

2025-02-26 14:43:48
推荐回答(3个)
回答1:

首先,用char存储12个字节,需要声明一个长度为13的数组,最后一位放结束符'\0'
然后,普通的char范围为0-127,而2位的十六进制数(假设都是正整数)范围为0-255,需要使用unsigned char类型存储,否则大于127的数字会溢出并被存为一个不正确的数,如果你的数字包括的负数,这样写也是会溢出的。
以下仅考虑正数情况。
代码如下:
#include
using namespace std;

int main(void)
{
unsigned char buffer[13];
buffer[12] = '\0';

for(int i = 0;i <12; i++)
{
int c;
cin>>hex>>c;
buffer[i] = c;
int k = buffer[i] & 0xffffffff;
cout< }
//不可以直接对buffer进行cout输出(cout默认只输出ascii码表(0-127)中的可视内容,可能需要做某些设置吧,不太清楚),可以将buffer通过 & ffffffff(假设int为4字节)赋值给int后输出int值,或者直接这样cout<<(int)buffer[i];
return 0;
}

回答2:

#include
#include
#include
#define N 100

int main()
{
int i,j,n,len;
char st[]="48494A4B4C4D4E4F";
char st2[N];
int char2num(char ch);
for (i=0;i st2[i]=0;

len=strlen(st);
j=0;
for (i=0;i {
n=char2num(st[i])*16+char2num(st[i+1]);
st2[j++]=n;
}
printf("st2=%s",st2);

getch();
return 0;
}

int char2num(char ch) /*将字符转成数字*/
{
if (ch>='a')
return ch-'a'+10;
else if (ch>='A')
return ch-'A'+10;
else
return ch-'0';
}

回答3:

#include
#include

int main(void)
{
char buffer[12];
char n;
int i;
for(i=0;i<12;++i)
{
scanf("%c",&n);
buffer[i]=n;
}
return 0;
}