20240803进制、BCD码

比特、字节、进制之间的关系

​ 每一个二进制位就是一个比特,即一个字节是八个二进制位

​ 例如:

十六进制的60

转成对应的二进制:01100000

01100000每一位是一个bit,不能再拆分了

​ 以下是问ai关于某进制数占用字节空间的问题:

​ 问:一个十六进制数,占几个字节?

​ 答:一个十六进制数本身并不直接占用固定的字节数,因为它仅仅是一个数的表示形式,类似于十进制或二进制数。十六进制数的占用空间(即字节数)取决于它所表示的数值大小以及它是如何被存储或传输的。

然而,在大多数编程和数据处理环境中,当我们谈论十六进制数时,我们通常是在处理固定大小的数据类型,如8位(1字节)、16位(2字节)、32位(4字节)或64位(8字节)的整数。在这些情况下,十六进制数(或其对应的二进制表示)将占用该数据类型指定的字节数。

例如:

  • 如果一个十六进制数被存储在一个8位的byte(或unsigned char)数据类型中,那么它就占用1个字节。
  • 如果它被存储在一个16位的short(或unsigned short)数据类型中,那么它就占用2个字节。
  • 对于32位的int(或unsigned int)和64位的long long(或unsigned long long),则分别占用4个字节和8个字节。

需要注意的是,十六进制只是一种数的表示方法,它并不改变数值本身所占用的空间。无论一个数是用十进制、二进制还是十六进制表示,它在计算机中的存储和传输都是以其二进制形式进行的,并且所占用的空间取决于它被声明或定义时的数据类型。

linux查看python进程

ps aux | grep python:这会查出所有python进程

kill -9 PID:杀掉指定进程

十六进制串转字节串

hex_str = '68 0B 00 68 C9 08 08 00 10 00 02 60 00 01 00 45 C0 16'  
# 首先,我们需要去除字符串中的空格(如果有的话),因为fromhex()不接受空格  
hex_str_no_spaces = hex_str.replace(' ', '')  
  
# 然后,使用bytes.fromhex()将十六进制字符串转换为字节串  
byte_str = bytes.fromhex(hex_str_no_spaces)  
  
print(byte_str)  # 输出: b'h\x0b\x00h\xc9\x08\x08\x00\x10\x00\x02`\x00\x01\x00E\xc0\x16'  
print(type(byte_str))  # 输出: <class 'bytes'>

字节串转十六进制串

bcd_str = ''  
int_str = ''  
recvdata = b'h\x0b\x00h\xc9\x08\x08\x00\x10\x00\x02`\x00\x01\x00E\xc0\x16'  
  
for item in recvdata:  
    print(f'item:{item}, type:{type(item)}')  
    bcd_str += '%02X ' % item  # 转换为十六进制并添加空格  
    int_str += ' ' + str(item)  # 转换为十进制并添加空格,注意这会在字符串开头添加一个额外的空格  
  
# 移除int_str开头的空格  
if int_str:  
    int_str = int_str[1:]  
  
print(f'bcd_str: {bcd_str.strip()}, type:{type(bcd_str)}')  # 使用strip()去除末尾的空格  
print(f'int_str: {int_str}, type:{type(int_str)}')

BCD码和进制:

​ 一个十进制的BCD码,将其BCD码作为一个二进制数,计算这个二进制数的16进制,结果和这个十进制数一样。

45的bcd码是0100 0101,把01000101当成二进制,其16进制也是45

165的bcd码是0001 0110 0101,把0001 0110 0101当成二进制,其16进制位165

posted @ 2024-08-05 09:27  marverdol  阅读(117)  评论(0)    收藏  举报