python在特定位宽下,有符号数的10进制,2进制,16进制之间的转换。


16进行转换为10进制

# singed_bin2dec.py
import os,sys,re

data = sys.argv[1]; # hex data

try:
    width = int(sys.argv[2]);
except IndexError:
    width = 7;

dec_data = int(data, 16);
print(dec_data);
if(dec_data>2**(width-1)-1_:
    dec_data = 2**width-dec_data;
    print(-dec_data);

2进制转10进制

# singed_bin2dec.py
import os,sys,re
data = sys.argv[1]; # hex data

try:
    width = int(sys.argv[2]);
except IndexError:
    width = 7;

if(len(data)!=width):
    print("\ndata length is wrong.....\n");
    sys.exit();

dec_data = int(data, 2);
print(dec_data);
if(dec_data>2**(width-1)-1_:
    dec_data = 2**width-dec_data;
    print(-dec_data);

10进制转16进制

# singed_dec2hex.py
import os,sys,re

data = int(sys.argv[1]);

try:
    width = int(sys.argv[2]);
except IndexError:
    width = 7;

if(data>2**(width-1)-1):
    print("\ndata is too big .......\n");
    sys.exit();
if(data<-2**(width-1)):
    print("\ndata is too small.....\n");
    sys.exit();

if(data<0):
    data = 2**width+data;
    bin_data = bin(data);
    bin_data = bin_data[2:len(bin_data)];
    hex_data = hex(int(bin_data,2));
    print(hex_data);
else:
    bin_data = bin(data);
    bin_data = bin_data[2:len(bin_data)];
    for i in range(0,width-len(bin_data)):
        bin_data = '0' + bin_data;
    
    hex_data = hex(int(bin_data,2));
    hex_data = hex_data[2:len(hex_data)];
    for i in range(0,(width+3)/4-len(hex_data)):
        hex_data = '0' + hex_data;
    print('0x'+tmp);

10进制转2进制

# singed_dec2hex.py
import os,sys,re

data = int(sys.argv[1]);

try:
    width = int(sys.argv[2]);
except IndexError:
    width = 7;

if(data>2**(width-1)-1):
    print("\ndata is too big .......\n");
    sys.exit();
if(data<-2**(width-1)):
    print("\ndata is too small.....\n");
    sys.exit();

if(data<0):
    data = 2**width+data;
    bin_data = bin(data);
    bin_data = bin_data[2:len(bin_data)];
    print(bin_data);
else:
    bin_data = bin(data);
    bin_data = bin_data[2:len(bin_data)];
    for i in range(0,width-len(bin_data)):
        bin_data = '0' + bin_data;
    
    print(bin_data);

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM