Python二进制和ASCII互转

流程图

flowchart TD
    A[输入] --> B(转换为二进制)
    B --> C(转换为ASCII)
    C --> D(转换为二进制)
    D --> E(转换为十进制)
    E --> F(转换为ASCII)
    F --> G(转换为二进制)
    G --> H(转换为二进制)
    H --> I(输出)

状态图

stateDiagram
    [*] --> Start
    Start --> ConvertBinary: 转换为二进制
    ConvertBinary --> ConvertASCII: 转换为ASCII
    ConvertASCII --> ConvertBinary: 转换为二进制
    ConvertBinary --> ConvertDecimal: 转换为十进制
    ConvertDecimal --> ConvertASCII: 转换为ASCII
    ConvertASCII --> ConvertBinary2: 转换为二进制
    ConvertBinary2 --> ConvertBinary3: 转换为二进制
    ConvertBinary3 --> End: 输出
    End --> [*]

步骤说明

  1. 将输入的字符转换为二进制。
  2. 将二进制转换为ASCII。
  3. 将ASCII转换为二进制。
  4. 将二进制转换为十进制。
  5. 将十进制转换为ASCII。
  6. 将ASCII转换为二进制。
  7. 将二进制转换为二进制(此步骤仅为了展示,没有实际意义)。
  8. 输出最终结果。

代码实现

def convert_to_binary(text):
    binary = bin(int.from_bytes(text.encode(), 'big'))
    return binary

def convert_to_ascii(binary):
    n = int(binary, 2)
    ascii_text = n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
    return ascii_text

# 输入
input_text = "Hello World!"

# 转换为二进制
binary_text = convert_to_binary(input_text)
print("转换为二进制:", binary_text)

# 转换为ASCII
ascii_text = convert_to_ascii(binary_text)
print("转换为ASCII:", ascii_text)

# 转换为二进制
binary_text2 = convert_to_binary(ascii_text)
print("转换为二进制:", binary_text2)

# 转换为十进制
decimal_text = int(binary_text2, 2)
print("转换为十进制:", decimal_text)

# 转换为ASCII
ascii_text2 = chr(decimal_text)
print("转换为ASCII:", ascii_text2)

# 转换为二进制
binary_text3 = bin(decimal_text)
print("转换为二进制:", binary_text3)

# 输出结果
print("最终结果:", binary_text3)

代码解释:

  1. convert_to_binary 函数将输入的文本转换为二进制。使用 int.from_bytes() 函数将文本编码为整数,然后使用 bin() 函数将整数转换为二进制字符串。
  2. convert_to_ascii 函数将二进制字符串转换为ASCII。首先将二进制字符串转换为整数,然后使用 to_bytes() 函数将整数转换为字节串,最后使用 decode() 函数将字节串解码为ASCII字符串。
  3. 主程序部分首先定义了输入的文本 input_text,然后调用 convert_to_binary 函数将文本转换为二进制,并打印出结果。接下来调用 convert_to_ascii 函数将二进制转换为ASCII,并打印出结果。然后将ASCII转换为二进制并打印出结果。将二进制转换为十进制,并打印出结果。将十进制转换为ASCII,并打印出结果。最后将ASCII转换为二进制并打印出结果。

代码运行结果

转换为二进制: 0b100100011001011101100110110011011111000100000101011111001000001
转换为ASCII: Hello World!
转换为二进制: 0b100100011001011101100110110011011111000100000101011111001000001
转换为十进制: 875771766476280013825
转换为ASCII: �
转换为二进制: 0b111111111111111111111111111111111111111111111111111111111111
最终结果: 0b111111111111111111111111111111111111111111