不使用'printf'将整数转换为十六进制(C编程)

jdzmm42g  于 2022-12-29  发布在  其他
关注(0)|答案(9)|浏览(116)

不使用'printf'是否可以将整数转换为十六进制?
如果所有的值都放在变量本身和一些带有解释的示例代码中,效果最好。

kknvjkwl

kknvjkwl1#

十进制和十六进制系统只是表示int值的方法。在某种程度上,“它已经是十六进制了”。

2ledvvac

2ledvvac2#

我认为可以在stdlib.h中使用itoa:
第一个月
文件:itoa documentation

wrrgggsh

wrrgggsh3#

当然有可能,只要想想printf本身最初是如何实现的...
我不会给予你一个完整的解决方案,只有提示,根据这些提示,你可以在代码中试验实现:
一个8位数可以表示为2个十六进制数字,分别包含高4位和低4位。要获取这些位,可以使用移位(>>)和掩码(&)运算符。
一旦有了4位值,就可以使用if序列,或者(作为更优雅的解决方案)通过索引到字符数组中,轻松地将其Map到正确的十六进制数字。

brgchamk

brgchamk4#

Hexdecival vs Decimal vs Binary..etc..只是表示同一个数字的不同基数。printf不会转换你的数字,它会生成一个十六进制字符串表示你的数字。如果你想实现自己的study,如何在十进制和十六进制之间进行转换。

ct2axkht

ct2axkht5#

是的,在不使用“printf”系列格式化函数的情况下,将整数转换为十六进制字符串绝对是可能的。

你可以通过将数字从10进制(我们认为是10进制)转换为16进制(十六进制)并打印出这种表示形式的数字(0-9A-F)来编写这样一个函数,这需要你对the bases we use to represent numbers进行大量的思考。

9lowa7mx

9lowa7mx6#

如果你是指在C语言中将一个int显示为十六进制数,那么你必须写一个函数来做与printf相同的事情。
如果您指的是强制转换或内部表示,则不能这样做,因为十六进制不是数据类型。

hsvhsicv

hsvhsicv7#

一个int是以二进制数的形式存储在计算机中的,事实上,由于hex可以解释为写二进制的简写,你甚至可以说,当你使用printf打印出一个十进制数时,它必须从 * hex * 转换为 * decimal。

sbtkgmzw

sbtkgmzw8#

这是一个将字符数组转换为十六进制字符串格式示例

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

unsigned char d=255;
char hex_array[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char *array_to_hex_string(uint8_t data[],int size);
char test_data[3] = {'0',188,255};
int main()
{

    printf("%s",array_to_hex_string(test_data,3));
    return 0;
 }

 char *array_to_hex_string(uint8_t data[],int size){
 int i,j;
 char *hex_string = (char *)malloc((2*size) * sizeof(data[0]));
for(i=0;i<size;i++){
    hex_string[j] = hex_array[(data[i]>>4)];
    hex_string[j+1] =  hex_array[(data[i] & 15)];

    j +=2;
        }
return (char *)hex_string;
}
mv1qrgav

mv1qrgav9#

cout << hex << intvar << endl;

但是如果你想要一个给你的家庭作业打A的答案,你就不会那么幸运了:)

相关问题