这不是一个编程问题,更多的是要了解什么是什么问题?我不是CS专业,我试图理解这3种格式之间的基本区别:
1)EBCDIC 2)无符号二进制数3)二进制编码的十进制
如果这不是一个真正的问题,我道歉,但谷歌对我解释这个并不是很有用
说我有一串像“12890”这样的数字。他们在
中代表什么?EBCDIC,无符号二进制数和BCD格式?
是否有一个python 2.6库我可以用来简单地将任何数字字符串转换为这些格式中的任何一种?
例如,对于字符串到ebcdic,我正在做
def encodeEbcdic(text):
return text.decode('latin1').encode('cp037')
print encodeEbcdic('AGNS')
但是,我得到了这个┴╟╒Γ
答案 0 :(得分:2)
EBCDIC是一种IBM字符编码。它用于编码文本。当然,数字可以出现在文本中,如“宾夕法尼亚大道1600”,因此也有数字代码。要将1600转换为EBCDIC,您需要找到EBCDIC表。然后你查找代码为1,代码为6,代码为0(两次。)根据http://www.astrodigital.org/digital/ebcdic.html的表格 0到9的EBCIDIC代码分别是F0到F9。这看起来很熟悉,但我不能说我真的记得。
无符号二进制数就是这样。这是用二号写的数字。 (见下文。)
二进制编码的十进制(BCD)是一种旧格式,用于在数字计算机上存储数字的十进制表示。每个十进制数字由其二进制等效值表示。我们以64为例。因为64只是2到6的幂,所以二进制表示为1,后跟6 0:1000000。在二进制编码的十进制中,我们用二进制写入六个 - 0110和二进制的四个 - 0100,这样BCD表示为01100100.每个数字需要4位,因为最大的十进制数字9表示为1001.BCD在COBOL中广泛使用。如果它现在在其他地方使用,我对这个应用程序并不熟悉。
编辑:我应该解释一下,EBCDIC中的F0,F1等是十六进制代码,因此F是1111,数字与BCD中的数字相同。因此,数字的EBCDIC与BCD相同,但在每个数字之前额外增加了1111。
答案 1 :(得分:0)
从那时起,我阅读了更多关于数据类型等内容。
无论如何,回答我的问题:
1)字符串到EBCDIC:
def encode_ebcdic(text):
return text.decode('latin1').encode('cp037')
这里的编码是美国的cp037。您可以将cp500用于国际。以下是它们的列表: https://en.wikipedia.org/wiki/List_of_EBCDIC_code_pages_with_Latin-1_character_set
2)十六进制字符串到无符号二进制数:
def str_to_binary(text):
return int(str, 16)
这是非常基本的,只需将十六进制字符串转换为数字。
3)十六进制字符串到二进制编码的十进制:
def str_to_bcd(text):
return bytes(str).decode('hex')
是的,您需要将其转换为字节数组,以便进行BCD转换。请阅读saulspatz答案,了解BCD编码是什么。