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