繁体   English   中英

C中的十进制和十六进制二进制

[英]Binary to dec and hex in C

我想创建将返回十六进制数字的函数。 但是在更改为十进制数字后,我得到了一些错误的数字。 在输出中,第一个数字是二进制,第二个也是二进制但采用int格式,第三个数字应为十进制。 但是我用十进制表示的数字有误(请参阅第二行,应该是156,而不是220)。 谁能解释我在做什么错,我怎么能得到正确的数字? 谢谢。 这是我的输出:

在此处输入图片说明

    char *encrypted = calloc((size_t)TEXT_LEN*3, sizeof(char));
int number[TEXT_LEN];
index=0;
for(int i=0;i<TEXT_LEN;i++){

    number[i]=atoi(binary[i]);

    printf("%s ",binary[i]);
    printf("%d ",number[i]);
    printf("%d\n",(unsigned char)number[i]);

    sprintf(encrypted+index,"%x ",(unsigned char)number[i]);

    index+=3;
}

printf("%s\n",encrypted);
free(encrypted);

编辑:我在注释中找到了解决方案,并通过在行中使用功能strtol对其进行了修复:

number [i] = strtol(binary [i],NULL,2);

如果数字值小于16,则写入的字符串长度为2,最后插入char'\\ 0'。 使用固定尺寸

sprintf(encrypted+index,"%02x ", number[i]);
index += 3;

或使用sprintf函数的返回值(即写入的字符串长度)来增加索引

index += sprintf(encrypted+index,"%x ", number[i]);

我希望两者结合

index += sprintf(encrypted+index,"%02x ", number[i]);

基于二进制的八个字符串,上述user3121023的方法将为您提供正确的十进制数字

number[i] = strtol(binary[i], NULL, 2);
printf("%s ", binary[i]); // 1st col
printf("%d\n", number[i]); // 2nd col

在输出的第二行中,我编写了一个C plus plus程序来解释您的疑问:

int value = 10011100;
cout<<bitset<sizeof(int)*8>(value)<<value<<endl;    // 0000000010011000110000011101110010011100
unsigned char va = (unsigned char)value;
cout<<bitset<sizeof(unsigned char)*8>(va)<<endl;    // 11011100

将十进制数10011100转换为二进制数10011000110000011101110010011100 ,然后将其放入无符号字符中,得到11011100 ,即220。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM