void HextoBCD(u8 *pBuff,u8 len) //十六进制转为BCD码
{
u8 i,temp
for(i=0i<leni++)
{
temp=pBuff[i]/10
time[i]=pBuff[i]%10+temp*16
}
}
bcd码就是用二带袭冲进制数来表示常用的十蠢歼进制数。就是用四个位的二进制来表示一个二进制数。一个字节一共有八个位,它就可以表示两个bcd码。比如,0FH等于二禅租进制物15,用一个字节低四位来表示5,高四位来表示1合起来就是15H,不用转换两次的。
扩展资料例如:
63÷10=6……3
即商是6,余数是
如果将商乘以16再加上余数,就是:6×16+3=99,其16进制数就是63H,即是十进制数63(16进制为3FH)的BCD码为63H。
如果在单片机中,程序这么写:char HEX,BCD;BCD=(HEX/10*16)+(HEX%10)
其中HEX存储十六进制数,BCD中存储的就是其BCD码。
参考资料来源:百度百科-BCD码
1、首先左移要转换的二进制码1位; 左移之后,BCD码分别置于百位、十桐春位念迅、个位; 如果移位后所在的BCD码列大于或等于5,则对该值加3;继续左移的过程直至全部移位完成,并检查每一列对应的bcd码是否
2、接着看信号列表。
3、然后二进制代码设计。
4、十进制代码。
5、十六进制,最后就完成了。
注意事项:
BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系仔轮此统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。
四字节16进制数可转换为四个二进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。以下用VB代码处理。
VB有专门的API函数CopyMemory能处理2-10进制浮点数转换滚穗和10-2进制浮点数转换。
下列代码演示了10进制Single(单精度浮点型转为16进制字符显示的浮点数和其相反运算:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub BinToSin_Click()
Dim sinStr As String
Dim sinSj As Single
Dim Buffer(3) As Byte
Dim i As Integer
sinStr = Text2
For i = 1 To Len(Text2) Step 2
Buffer((7 - i) / 2) = Val("&H" &Mid(sinStr, i, 2))
Next
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text3 = sinSj
End Sub
Private Sub SinToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Single
Dim Buffer(3) As Byte
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To 3
If Len(Hex(Buffer(i))) = 1 Then
hexData = "0" &Hex(Buffer(i)) + hexData
Else
hexData = Hex(Buffer(i)) + hexData
End If
Next
Text2 = hexData
End Sub
需要注意的事项是这四字简卖节的高低字节排序,不能搞错。
VB的Single 数据类型
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。
在内存以32位二进制形式存在:
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
第1位为符号位
第2-9位为阶码位
第10-32位为2进制小数尾值
即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX
其中
F为正号大咐卜或负号(首为为0正数,首位为1负数
n为2-9位组成的BYTE数据值
XXXXXXX XXXXXXXX XXXXXXXX为尾数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)