2017-03-07 63 views
0

我得到一个int值从0到255,我想将该值转换为十六进制或二进制,所以我可以将它用于一个8位寄存器(PIC18F UC)。 我该如何做这种转换? 我试图从转换库中使用IntToHex函数,但此函数的输出是一个char值,从这里我卡住了。 我正在使用mikroc进行图片处理。 我应该从哪里开始? 谢谢!从int转换为二进制或十六进制在mikroc

+2

不清楚你在问什么,位是位。向我们展示您想要以编程方式执行的具体示例。我在这个基地获得了这个值,并且希望它以这种形式在这个基地中转换为这个值,所以我可以在这里使用它... –

+1

0到255之间的数字可以放入一个8位寄存器,这是你唯一需要担心的事情。了解8位或16位有符号/无符号整数的数字限制。十六进制,八进制,十进制或二进制 - 这些只是同一个整数的*表示*。您拥有的值通常是在微控制器中作为*二进制*编码编码的,并且只有在您要执行按位运算(提取,掩码或移位单个位)时才需要关注。当你想把*表达*改成十六进制/十进制/十进制时,唯一的地方就是将值显示给用户。 – Groo

+0

换句话说,'IntToHex'可能返回一个'char' **指针**,即一串字符,因为它将整数转换为文本表示以供显示。例如,如果你的值是'255','IntToHex'可能会返回一个以null结尾的字符串'“FF”'。但是要将值分配给寄存器,只需分配**实际值**,而不是字符数组。 – Groo

回答

0

这是一个常见问题。许多人不明白,十进制15是相同的十六进制F是相同的八进制17是相同的二进制1111.

不同的数字系统是人类,对于CPU,它都是二进制!

当OP说,

我得到了一个int值从0到255,我想那个值转换为 十六进制或二进制,所以我可以用它为8位寄存器(PIC18F UC)。

它反映了这种误解。可能是因为调试器配置为显示“十进制”值,示例代码/数据表显示寄存器操作的十六进制值。

因此,当您从0到255的“int”值时,可以直接将该数字写入8位寄存器。您不必将其转换为十六进制。十六进制只是让人类的生活变得轻松的代表。

你可以做的是 - 这是很好的做法 -

REG_VALUE = (unsigned char) int_value;