今天工作中遇到python数值转换为BCD编码的问题。公司现有C语言的动态库实现了特定的BCD压缩但是并不通用。如 20160701转换成BCD后为 02 01 60 70 1F,即前补0后补F多出了一个字节。
由于第三方要求(通用的)是8位的日期转换成的是4个字节的BCD值即,20160102在内存中是长度为4字节的'\x20\x16\x01\x02'。怎么整!怎么整!!!!!
实现方式1(失败求帮助):
Python 有bytes=struct.pack('i',1),bytes实际是字符串,1的16进制表示为'\x01\x00\x00\x00'。基于该功能,想通过类似于操作数组的形式bytes[0]='\x20'
bytes[1]='\x16'......
但是修改bytes[index]里面的值会报错(TypeError: 'str' object does not support item assignment),字节编码值不能进行类似操作。
实现方式2(失败求帮助)
方式2是直接采用字符串与\x拼接。如 '\x' + str。这时报错(ValueError: invalid \x escape)。
将\x中的斜杠转译 \\x倒是可以与字符串拼接。但是却改变了原本的数值。
综上所述:1.如何操作bytes像数组一样。
2.如何拼接字节字符串,即方式2中所希望的拼接方式。
这些都不行,有没有更为精准实际的办法。
给你个眼神
本回答被网友采纳python 数值转BCD,如何拼接二进制字符串
首先你可以自己写函数采用%2的方式来算.但是python自带了方法 bin.比如bin(12345)回返回字符串'0b11000000111001' 这个时候在把0b去掉即可.bin(number).replace('0b','')
python 怎么将abc装换成bcd
===先给你代码=== a='abc'b=''for i in a:b=b+chr(ord(i)+1)print (b)=== 这样输出的b的值就是‘bcd’远离就是逐个取原字符串a的每一位,然后将对应的ascii值加1,重新形成一个新字符串b。ord()是将字符转换为对应的ASCII码,chr()是将ASCII码转换为对应的字符。希望对你有所...
Python中的struct
使用`pack`函数可以将python数据类型转换成字节流,然后使用`unpack`函数将字节流解析成python数据类型。考虑到JT808协议中的【位置信息汇报】(0x0200),其中涉及到的DWORD、WORD、BCD等类型,我们首先使用`pack`函数将python数据类型转换成字节流,然后再使用`unpack`函数将字节流解析成python数据类型。通过...
python中abc的大小
在Python中,字符串可以通过比较运算符进行大小的比较。字符串的比较规则就是按照字典序进行比较。字典序是指按照字母表的顺序,从左到右依次比较每个字符的大小,如果字符相等,则继续比较下一个字符,直到比较出大小关系。点击学习大厂名师精品课例如,对于字符串"abc"和"bcd"进行比较,先比较第一个字符"...
如何把ASCII码转换成BCD码
首先将ASCII码化成十进制,想直接到BCD不行BCD码有8421、2421等 一般多用8421型的是什么意思呢,举个例子(8421):比如8(BCD)=1000 即8X1+4X0+2X0+1X0=8 (2421):8(BCD)=1110道理都是一样的。单位的十进制就像上面一样,那么像2156【BCD (8421)】=0010 0001 0101 0110 以上是有权BCD码还有就是无权BCD...
如何将二进制码转换成ASCII码
另外,BCD码一般不说成2进制数,BCD码集{00H,,,09H}和自然一位数数集{0,,,9}是一一对应关系。拿到一个BCD码,等于拿到一个自然数,把它翻译成ASCII码,一般的目的都是为了送字符显示设备显示。如果你把16进制数05H送给字符显示设备,它一定显示不出“5”这样的东西来,把05H转换成BCD码(...
python编写用pow()函数计算球的体积?
第一个字符 "a" !fieldname![-2] 倒数第二个字符 "d" !fieldname![1:4] 第二、三和四个字符 "bcd" Python 也支持使用 format() 方法的字符串格式。 将合并后的 FieldA 和 FieldB 以冒号分隔开。 "{}:{}".format(!FieldA!, !FieldB!) 常见Python 字符串操作 简单数学示例 Python 提供了处理数...