在C ++中,我将四个二进制数存储在四个strings
中,让我们说:
string s1="1010", s2="1011", s3="0100", s4="0011";
或直接存储为int
s:int i1=10, i2=11, i3=4, i4=3;
。
我不知道哪种情况会导致更好的解决方案,这就是我想澄清的原因,我可以从两者开始。
现在我想做的是如下。将上述值转换为十六进制值并将其以数字方式存储在一个字符串中:string hex_result="AB43";
(1010=10=A
,1011=11=B
,0100=4=4
,0011=3=3
)。之后,我需要hex_result
描述的实际值,即:int value = 43843;
(作为AB43=43843
)。
我知道我可以通过直接将二进制值作为一个字符串"1010101101000011"
进行评估来实现这一点,但我需要从单个二进制字符串中获取十六进制代码,因此如上所述。
答案 0 :(得分:0)
从int
开始:
int i1=10, i2=11, i3=4, i4=3;
int value = (i1<<12) + (i2<<8) + (i3<<4) + i4;
char hex_result[5];
sprintf(hex_result, "%X", value);
应该工作......
答案 1 :(得分:0)
除了@ Amit的回复,这也会有效:
int i1=10, i2=11, i3=4, i4=3;
char result[5];
sprintf(result,"%x%x%x%x\n", i1,i2,i3,i4);
这消除了位移,但由于二进制到十六进制转换的性质,产生了相同的结果。