Chuyển đổi các số và chuỗi nhị phân, bát phân và thập lục phân sang và từ nhau trong Python

Kinh doanh

Python có thể xử lý các số và chuỗi dưới dạng số nhị phân, bát phân và thập lục phân cũng như các số thập phân thông thường. Nó cũng dễ dàng chuyển đổi giữa chúng.

Trong phần này, các nội dung sau sẽ được giải thích cùng với mã mẫu.

  • Viết số nguyên ở dạng nhị phân, bát phân và thập lục phân.
  • Chuyển đổi số thành chuỗi trong ký hiệu nhị phân, bát phân và thập lục phân.
    • chức năng tích hợp sẵn (ví dụ: trong ngôn ngữ lập trình)bin(),oct(),hex()
    • phương pháp chuỗistr.format(), Chức năng tích hợp sẵnformat(), chuỗi f
    • Chuyển đổi một số nguyên âm thành một chuỗi ở định dạng phần bù của hai.
  • Chuyển đổi các chuỗi ký hiệu nhị phân, bát phân và thập lục phân thành số.
    • chức năng tích hợp sẵn (ví dụ: trong ngôn ngữ lập trình)int()
  • Ví dụ ứng dụng
    • Chuỗi nhị phân số học
    • Chuyển đổi giữa các số nhị phân, bát phân và thập lục phân

Viết số nguyên ở dạng nhị phân, bát phân và thập lục phân.

Bằng cách thêm các tiền tố sau, số nguyên int có thể được viết tương ứng ở dạng nhị phân, bát phân và thập lục phân.
Bạn cũng có thể sử dụng chữ in hoa.

  • Số nhị phân:0bhoặc0B
  • Hệ bát phân:0ohoặc0O
  • Số thập lục phân:0xhoặc0X

Đầu ra của print () sẽ ở dạng ký hiệu thập phân.

bin_num = 0b10
oct_num = 0o10
hex_num = 0x10

print(bin_num)
print(oct_num)
print(hex_num)
# 2
# 8
# 16

Bin_num = 0B10
Oct_num = 0O10
Hex_num = 0X10

print(Bin_num)
print(Oct_num)
print(Hex_num)
# 2
# 8
# 16

Ngay cả với tiền tố, kiểu là một số nguyên int.

print(type(bin_num))
print(type(oct_num))
print(type(hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>

print(type(Bin_num))
print(type(Oct_num))
print(type(Hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>

Vì nó là một kiểu số nguyên, nó có thể được sử dụng cho các phép toán số học thông thường.

result = 0b10 * 0o10 + 0x10
print(result)
# 32

Bắt đầu với Python 3.6, có thể chèn dấu gạch dưới _ bằng số. Lặp lại dấu gạch dưới _ sẽ dẫn đến lỗi, nhưng bạn có thể chèn bao nhiêu tùy thích miễn là không lặp lại.

Dấu gạch dưới _ không ảnh hưởng đến số, vì vậy nó có thể được sử dụng làm dấu phân cách khi có nhiều chữ số. Ví dụ, chèn một dấu gạch dưới _ mỗi bốn chữ số để dễ đọc.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Chuyển đổi số thành chuỗi trong ký hiệu nhị phân, bát phân và thập lục phân.

Để chuyển đổi một số thành một chuỗi trong ký hiệu nhị phân, bát phân hoặc thập lục phân, hãy sử dụng các hàm tích hợp sau.

  • chức năng tích hợp sẵn (ví dụ: trong ngôn ngữ lập trình)bin(),oct(),hex()
  • phương pháp chuỗistr.format(), Chức năng tích hợp sẵnformat(), chuỗi f

Phần này cũng giải thích cách lấy một chuỗi được biểu thị ở định dạng phần bù của hai cho các giá trị âm.

Các hàm tích hợp bin (), oct (), hex ()

Các hàm tích hợp sau có thể chuyển đổi số thành chuỗi nhị phân, bát phân và thập lục phân.

  • Số nhị phân:bin()
  • Hệ bát phân:oct()
  • Số thập lục phân:hex()

Mỗi trả về một chuỗi với các tiền tố sau

  • Số nhị phân:0b
  • Hệ bát phân:0o
  • Số thập lục phân:0x
i = 255

print(bin(i))
print(oct(i))
print(hex(i))
# 0b11111111
# 0o377
# 0xff

print(type(bin(i)))
print(type(oct(i)))
print(type(hex(i)))
# <class 'str'>
# <class 'str'>
# <class 'str'>

Nếu bạn không cần tiền tố, hãy sử dụng slice [2:] để trích xuất chuỗi đằng sau nó hoặc sử dụng format () như được giải thích tiếp theo.

print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff

Nếu bạn muốn chuyển nó thành một chuỗi thập phân, bạn có thể sử dụng str ().

print(str(i))
# 255

print(type(str(i)))
# <class 'str'>

Định dạng hàm dựng sẵn (), phương thức chuỗi str.format (), chuỗi f

Định dạng hàm tích hợp () và các phương thức chuỗi str.format () và f-string cũng có thể chuyển đổi số thành chuỗi nhị phân, bát phân và thập lục phân.

Bằng cách chỉ định đối số thứ hai của format () như sau, nó có thể được chuyển đổi tương ứng thành chuỗi nhị phân, bát phân và thập lục phân.

  • Số nhị phân:b
  • Hệ bát phân:o
  • Số thập lục phân:x
print(format(i, 'b'))
print(format(i, 'o'))
print(format(i, 'x'))
# 11111111
# 377
# ff

print(type(format(i, 'b')))
print(type(format(i, 'o')))
print(type(format(i, 'x')))
# <class 'str'>
# <class 'str'>
# <class 'str'>

Nếu bạn muốn nhận một chuỗi có tiền tố 0b, 0o, 0x, hãy thêm # vào chuỗi đặc tả định dạng.

print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff

Cũng có thể điền số 0 với bất kỳ số chữ số nào. Lưu ý rằng số ký tự cho tiền tố (hai ký tự) cũng phải được tính đến khi điền số 0 vào tiền tố.

print(format(i, '08b'))
print(format(i, '08o'))
print(format(i, '08x'))
# 11111111
# 00000377
# 000000ff

print(format(i, '#010b'))
print(format(i, '#010o'))
print(format(i, '#010x'))
# 0b11111111
# 0o00000377
# 0x000000ff

Phương thức chuỗi str.format () cũng có thể được sử dụng để chuyển đổi.

print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff

Bắt đầu với Python 3.6, bạn cũng có thể sử dụng chuỗi f.f'xxx'

print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff

Chuyển đổi một số nguyên âm thành một chuỗi ở định dạng phần bù của hai.

Khi một số nguyên âm được chuyển đổi thành chuỗi nhị phân hoặc thập lục phân bằng cách sử dụng bin () hoặc format (), giá trị tuyệt đối sẽ có dấu trừ.

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

Trong Python, các phép toán bit trên số nguyên âm cũng được thực hiện trong biểu diễn phần bù của hai. Do đó, nếu bạn muốn nhận một chuỗi được biểu thị ở dạng bổ sung của hai, bạn có thể sử dụng một cách logic bit HOẶC & amp; với số lượng chữ số bit tối đa được yêu cầu, như sau.

  • 4bit:0b1111(=0xf)
  • 8bit:0xff
  • 16bit:0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

Chuyển đổi các chuỗi ký hiệu nhị phân, bát phân và thập lục phân thành số.

Hàm tích hợp int ()

Để chuyển đổi một chuỗi ký hiệu nhị phân, bát phân hoặc thập lục phân thành một số, hãy sử dụng hàm tích hợp int ().

Với int (string, radix), một chuỗi str trong ký hiệu nhị phân, bát phân, thập lục phân, v.v. có thể được chuyển đổi thành int số dựa trên cơ số. Nếu cơ số bị bỏ qua, số được coi là số thập phân.

print(int('10'))
print(int('10', 2))
print(int('10', 8))
print(int('10', 16))
# 10
# 2
# 8
# 16

print(type(int('10')))
print(type(int('10', 2)))
print(type(int('10', 8)))
print(type(int('10', 16)))
# <class 'int'>
# <class 'int'>
# <class 'int'>
# <class 'int'>

Nếu cơ số được đặt thành 0, quá trình chuyển đổi được thực hiện dựa trên tiền tố chuỗi sau.

  • Tiền tố nhị phân:0bhoặc0B
  • Tiền tố bát phân:0ohoặc0O
  • Tiền tố thập lục phân:0xhoặc0X
print(int('0b10', 0))
print(int('0o10', 0))
print(int('0x10', 0))
# 2
# 8
# 16

print(int('0B10', 0))
print(int('0O10', 0))
print(int('0X10', 0))
# 2
# 8
# 16

Nếu số cơ sở là 0 và không có tiền tố, nó sẽ được chuyển đổi thành số thập phân, nhưng lưu ý rằng nếu phần đầu (phía bên trái) được điền bằng 0 thì sẽ xảy ra lỗi.

print(int('10', 0))
# 10

# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'

Trong các trường hợp khác, các chuỗi không điền có thể được chuyển đổi nguyên trạng.

print(int('010'))
# 10

print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255

Nếu không thể chuyển đổi chuỗi với cơ số hoặc tiền tố được chỉ định, thì sẽ xảy ra lỗi.

# print(int('ff', 2))
# ValueError: invalid literal for int() with base 2: 'ff'

# print(int('0a10', 0))
# ValueError: invalid literal for int() with base 0: '0a10'

# print(int('0bff', 0))
# ValueError: invalid literal for int() with base 0: '0bff'

Ví dụ ứng dụng

Chuỗi nhị phân số học

Ví dụ, để thực hiện một thao tác trên một chuỗi trong ký hiệu nhị phân với tiền tố 0b.

Bạn có thể dễ dàng chuyển đổi nó thành một giá trị số (kiểu số nguyên int), thực hiện các thao tác trên nó, và sau đó chuyển đổi nó trở lại thành chuỗi str một lần nữa.

a = '0b1001'
b = '0b0011'

c = int(a, 0) + int(b, 0)

print(c)
print(bin(c))
# 12
# 0b1100

Chuyển đổi giữa các số nhị phân, bát phân và thập lục phân

Nó cũng dễ dàng chuyển đổi các chuỗi nhị phân, bát phân và thập lục phân cho nhau. Sau khi được chuyển đổi thành số int, nó có thể được chuyển đổi thành một chuỗi có bất kỳ định dạng nào.

Không điền, tiền tố, v.v. có thể được kiểm soát bởi chuỗi đặc tả định dạng.

a_0b = '0b1110001010011'

print(format(int(a, 0), '#010x'))
# 0x00000009

print(format(int(a, 0), '#010o'))
# 0o00000011
Copied title and URL