woff 發表於 2025-1-28 23:05:34

WinHex to Dec 16進位轉換成10進位 位址程式

WinHex to Dec 16進位轉換成10進位 位址程式可針對 Sector per cluster 及 Hidden Sector 設定


把BusHound 抓到的TXT檔案轉存XXX.TXT
編輯XXX.TXT,把-----------------------------以上都刪除(包含---------------)
轉存XXX-A.TXT


打開WinHex2Dec.exe程式
按上圖輸入Sector per cluster 及 Hidden Sector 單位
選擇檔案 (目標值轉十進制 - Sector per cluster) / Hidden Sector = 輸出

在同一路徑會輸出一檔案XXX-A-output.TXT
打開就可以看到已經計算好的輸出值

打開WinHex程式,插入USB轉接卡,選擇磁碟如D:透過檔案管理員搜尋要尋找的檔案,對目標檔案壓右鍵
如:appmanifest_291550.acf (右鍵navigation->List clusters->出現clusters 14598位置)
對應XXX-A-output.TXT就可知是否有出現在讀取LOG內


原始碼
import pandas as pd
import tkinter as tk
from tkinter import filedialog

def hex2dec():
    if input_entry.get() == '':
      SPC = 8
    else:
      SPC = int(input_entry.get())

    if input1_entry.get() == '':
      HS = 2048
    else:
      HS = int(input1_entry.get())

    file_path = filedialog.askopenfilename()# 選擇檔案後回傳檔案路徑與名稱
    print(file_path)

    # 表頭有五項標籤 'Device', 'Phase', 'Data', 'Description', 'Cmd.Phase'
    header = ['Device', 'Phase', 'Data', 'Description', 'Cmd.Phase']
    # 讀取檔案成dataframe
    #df = pd.read_fwf("GameSart_DownLoad.txt")
    df = pd.read_fwf(file_path)
    file_path_arr = file_path.split('.txt')
    print(file_path_arr)

    # print(type(df))
    # print(df)
    print(df.shape)
    # print(df.iloc[:,1:7])
    # 從dataframe取DATA那行 1-7 行,第0行不讀
    first_col_cut = df.iloc[:, 1:7]
    print(first_col_cut.shape)
    print(type(first_col_cut))
    a = ""
    # 重組OUT字串
    for i in range(0, len(first_col_cut)):
      for j in range(0, 6):
            a = a + str(first_col_cut.iloc)

    # print(a)
    # 切割OUT字串
    out_arr = a.split('OUT')
    # print(out_arr)
    # 重新命名輸出檔案
    path = file_path_arr+'-output.txt'
    f = open(path, 'w')
    # 輸出設定訊息
    f.write("設定 Sector per cluster: " + str(SPC))
    print("設定 Sector per cluster: " + str(SPC))
    f.write("\n")
    f.write("設定 Hidden Sector: " + str(HS))
    print("設定 Hidden Sector: " + str(HS))
    f.write("\n")
    f.write("\n")
    for i in range(0, len(out_arr)):
      # print(len(out_arr))
      # out_arr1 =
      hex_arr = out_arr
      # 輸出每列及計算的訊息
      f.write("第" +str(i) + "列 的值: OUT " + hex_arr)
      print("第" +str(i) + "列 的值: OUT " + hex_arr)
      f.write("\n")
      # print(type(hex_arr))
      # 切割nan字串
      hex_arr1 = hex_arr.split('nan')
      for j in range(0, len(hex_arr1)):
            # print(hex_arr1)
            if j == 2:
                # 取nan陣列2字串
                hex_arr2 = hex_arr1
                # print (hex_arr2 )
                # 從字串第5位置切割
                hex_6code = hex_arr2
                f.write("16進位位址: " + hex_6code)
                f.write("\n")
                print("16進位位址: " + hex_6code)
                # 十六進位轉換十進位
                number = int(hex_6code, 16)
                if number <= 2048:
                  f.write("值小於"+ str(HS) +",無法計算")
                  print("值小於"+ str(HS) +",無法計算")
                else:
                  f.write("十進位位址: (" + str(number) + "-"+ str(HS) +")/"+ str(SPC) +" = " + str(int((number - HS) / SPC)))
                  print("十進位位址: (" + str(number) + "-"+ str(HS) +")/"+ str(SPC) +" = " + str(int((number - HS) / SPC)))
                print(" ")
                f.write("\n")
                f.write("\n")

    f.close()
    path_label.configure(text='來源:' + file_path, font=(font_type, 11), fg='red')
    message_label.configure(text='目的:' + path, font=(font_type, 11), fg='red')
    message1_label.configure( text= ' 轉換成功,請關閉視窗', font=(font_type,12), fg ='red')
    btn["state"] = "disable"

# 圖形使用者介面
window = tk.Tk()
window.title('Winhex 資料位址,16進位 轉 10進位')
window.geometry('500x160')

title_size =14
notice_size =13
font_size = 12
font_type='微軟正黑體'


header_label = tk.Label(window, text='Winhex 資料位址轉換', font=(font_type,title_size))
header_label.pack(side=tk.TOP)

input_frame = tk.Frame(window)
input_frame.pack(side=tk.TOP)
input_label = tk.Label(input_frame, text='Sector per cluster')
input_label.pack(side=tk.LEFT)
input_entry = tk.Entry(input_frame,width=4)
input_entry.insert(0,'8')
input_entry.pack(side=tk.LEFT)

input1_label = tk.Label(input_frame, text='Hidden Sector')
input1_label.pack(side=tk.LEFT)
input1_entry = tk.Entry(input_frame,width=6)
input1_entry.insert(0,'2048')
input1_entry.pack(side=tk.LEFT)

btn = tk.Button(window,
                text='選擇檔案',
                font=(font_type,14,'bold'),
                command=hex2dec
            )
btn.pack()
path_label = tk.Label(window, text='', font=(font_type,font_size))
path_label.pack(side=tk.TOP)
message_label = tk.Label(window, text='', fg ='red',width=80)
message_label.pack(padx=5,pady=5)

message1_label = tk.Label(window, text='', fg ='red',width=80)
message1_label.pack(padx=5,pady=5)

window.mainloop()



下載路徑
https://drive.google.com/file/d/159O4X7s3U1h3-VFxdtq_VOX4KvfGjDuH/view?usp=sharing





頁: [1]
查看完整版本: WinHex to Dec 16進位轉換成10進位 位址程式