c - C 中的二进制到十进制和十六进制

标签 c binary hex decimal

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

enter image description here

    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,并在末尾插入字符“\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 - C 中的二进制到十进制和十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49476421/

相关文章:

c - semop - 是否可以增加一个信号量(一组两个),而第二个信号量被阻塞

python - 在 Python 3.x 中生成位排列的最快方法

Java 扫描器 nextInt(16) 不接受负十六进制值

python regex 3 相同的 [0-9A-Fa-f] 对

mysql - 将 binary(16) Ip 值添加到 MySql 数据库

PHP 无法计数(二进制十六进制怪异)?

c - 反向单链表

c - "if(n/10)"在C中是什么意思?

c - pthread_join() 期间的段错误

binary - ELF对象中的多个字符串表