Senior's Blog

ゴルフ(Golf)、python(Pythonista)、メンタルヘルスに関するブログです。

10進<=>16進変換プログラム(ソースコード)

題記プログラムのソースコードです。

拙いコードで申し訳ないですが、参考になればと思います。

初めてPythonで書いたコードになります。

デバッグもあまり細かいところまではできていないので、

もしかしたら、変な操作をするとおかしな動作はあるかもしれません。

でも、これ以上改良するつもりはなく、次の別なプログラム作成に時間を

使いたいと考えています。

※ひとつ不具合を発見。

  10進数→16進数変換時、A-Fが含まれているとエラーになります。

  10進数の正当性チェックをしていませんでした。

 ※コピペしたらタブが全てなくなってしまい、この記事内で編集。

   そしたら、タブが使えなくて、編集にかなり手間取ってしまいました。

import ui
hd = ''     #Hex data

#Set hex data
def setHex(amari):
    global hd
    if amari <= 9:          #0 to 9
        hd += str(amari)
    else:
        if amari == 10:    #A
            hd += 'A'
        elif amari == 11: #B
            hd += 'B'
        elif amari == 12: #C
            hd += 'C'
        elif amari == 13: #D
            hd += 'D'
        elif amari == 14: #E
            hd += 'E'
        elif amari == 15: #F
            hd += 'F'
        else:
            return (-1)       #never come here

    return 0

#Dec. to Hex
def dec2hex(sender):
    global hd
    label = sender.superview['label1']         #get label-field
    dd = int(label.text)                                 #text of label to int.
    ln = len(label.text)                                  #length of input
    sho = 1                                                  #init. sho to not zero
    outputs = 0                                            #init. num. of display-char.
    while sho != 0:                                       #repeat until sho is 0
        sho = int(dd / 16)                               #calc. sho
        amari = int(dd % 16)                          #calc. amari
        ret = setHex(amari)                            #set data to Hex-field
                                                                  #if OK return 0, if NG return -1
        dd = sho.                                           #renew data for next
        if ret < 0:
            hd = 'NG'
            return hd
        outputs += 1                                      #increment num. of display-char.
    kd = ''
    for x in range(outputs,0,-1):                   #convert msb lsb
        kd += hd[x-1]
    return kd                                                #return hex data

 

#Hex. to Dec.
def hex2dec(sender):
    dd = 0
    label = sender.superview['label1'] #get label-field
    ln = len(label.text)

    for x in range(0,ln):
        dc = label.text[ln-x-1]
        if dc in '0123456789':     #0-9
            dd += int(dc)*(16**x)
        elif dc in 'A':                    #A
            dd += 10*(16**x)
        elif dc in 'B':                    #B
            dd += 11*(16**x)
        elif dc in 'C':                    #C
            dd += 12*(16**x)
        elif dc in 'D':                    #D
            dd += 13*(16**x)
        elif dc in 'E':                     #E
            dd += 14*(16**x)
        elif dc in 'F':                     #F
            dd += 15*(16**x)
    dc = str(dd)                          #convert dec. to str.
    return dc                              #return dec. data


#display input char.
def display_char(sender,t):
    label = sender.superview['label1']
    if t == '':
        label.text = ''
    else:
        label.text += t                  #add char to right-side

#Function of each button-click
def Btn_Click(sender):             #clicked Button
    t = sender.title                     #get title of button(0-9,A-F)
    display_char(sender,t).        #display input to label-field

#Excecute Dec. to Hex.
def BtnD2H_Click(sender):
    label = sender.superview['label1']
    ret = dec2hex(sender).        #dec. to hex.
    label.text = ret

#Excecute Hex. to Dec.
def BtnH2D_Click(sender):
    label = sender.superview['label1']
    ret = hex2dec(sender)         #hex. to dec.
    label.text = ret

def BtnClear_Click(sender):
    global hd
    hd = ''.                                 #initialize saved data
    display_char(sender,hd)      #clear display

#start up
v = ui.load_view()
v.present('sheet')