1

这不是一个编程问题,而是一个了解什么是什么的问题?我不是 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')

但是,我明白了这个┴╟╒Γ</p>

4

2 回答 2

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。在二进制编码的十进制中,我们将 6 写入二进制 - 0110,将 4 写入二进制 - 0100,这样BCD 表示为 01100100。每个数字需要 4 位,因为最大的十进制数字 9 等于 1001。BCD 在 COBOL 中被广泛使用。如果这些天在其他任何地方使用它,我不熟悉该应用程序。

编辑:我应该解释一下 EBCDIC 中的 F0、F1 等是十六进制代码,所以 F 是 1111,数字与 BCD 中的数字相同。因此,数字的 EBCDIC 与 BCD 相同,但在每个数字前多了一个 1111。

于 2015-07-26T16:11:56.697 回答
1

saulspatz,谢谢你的解释。我能够找出将任何数字字符串转换为不同编码所需的必要方法。我不得不参考 Effective Python Chapter 1, Item 3 : Know the Differences Between bytes, str, and unicode

从那里开始,我阅读了有关数据类型等的更多信息。

无论如何,回答我的问题:

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 编码是什么。

于 2015-08-04T13:57:08.920 回答