- Int to Hex
hex(97) # '0x61'
- Int to Char
chr(97) # 'a'
- Int to String
str(97) # '97'
- Hex to int
int('0x61', 16) # 97
- Hex to Char
chr(int('0x61', 16)) # 'a'
- Hex to String
string = '61626364'
''.join(chr(int(string[i:i+2], 16)) for i in range(0, len(string), 2)) # 'abcd' - Char to Int
ord('a') # 97
- Char to Hex
hex(ord('a')) # '0x61'
- String to Int
int('97') # 97
- String to Hex
string = 'abcd'
''.join([hex(ord(x))[2:] for x in string]) # '61626364'
2015年3月24日 星期二
Python - int, hex, char, string的轉換
2015年1月26日 星期一
Python - Unique list
map的key不允許重複,list的element可以允許重複,set的element不允許重複。
基於上述資料型態的特性,要將list變成unique list可以利用set。
基於上述資料型態的特性,要將list變成unique list可以利用set。
sample = [1,2,3,1,2,3,4,5]
sample = list(set(sample)) # [1,2,3,4,5]
2015年1月22日 星期四
Python - fork
Python使用fork可以讓process從呼叫的那一刻起一分為二。
上述例子中,還有一處值得探討的是print('pid', os.getpid(), myFoo(2))這一行輸出的結果
pid 5653 486和pid 5653 2048,執行輸出動作都是parent process,但是輸出內容有parent process從myFoo()回傳的2048和child process從myFoo()回傳的486。原因是,parent process呼叫print(),當print()進行到一半時跳到myFoo()之中,在myFoo()中呼叫os.fork()從此一分為二,parent process執行完myFoo()後回傳給呼叫myFoo的process,也就是parent process,child process執行完myFoo()後回傳給呼叫myFoo的process,一樣也是parent process,所以才會輸出pid 5653 486和pid 5653 2048;print('pid', os.getpid(), 'finish')這一行是在一分為二後才會進行的,parent process和child process個別進行,才會輸出pid 5654 finish和pid 5653 finish這兩行。
import os實驗的執行結果為:(請注意,每次執行的pid和印出來的順序會不同)
def myFoo(num : int) -> int:
loop_times = 0
print('start pid', os.getpid())
f = os.fork()
if f == 0:
# child process: num*(3^5)
while loop_times < 5:
num *= 3
print('child', os.getpid(), loop_times, num)
loop_times += 1
else:
# parent process: num*(2^10)
while loop_times < 10:
num *= 2
print('parent', os.getpid(), loop_times, num)
loop_times += 1
return num
def main():
print('pid', os.getpid(), myFoo(2))
print('pid', os.getpid(), 'finish')
if __name__ == '__main__':
main()
start pid 5653在f = os.fork()這一行,parent process #5653呼叫os.fork(),呼叫後傳回child process的pid #5654給parent process的變數f,而child process誕生於呼叫os.fork()後,在child process中也會傳回值給變數f,但是因為child process並沒有從呼叫os.fork()開始,所以傳回的值是0。至此之後,所有的expression都一分為二,parent process和child process都各自有一份並進行動作。
parent 5653 0 4
parent 5653 1 8
parent 5653 2 16
parent 5653 3 32
parent 5653 4 64
child 5654 0 6
parent 5653 5 128
parent 5653 6 256
child 5654 1 18
parent 5653 7 512
child 5654 2 54
parent 5653 8 1024
child 5654 3 162
parent 5653 9 2048
child 5654 4 486
pid 5653 486
pid 5653 2048
pid 5654 finish
pid 5653 finish
上述例子中,還有一處值得探討的是print('pid', os.getpid(), myFoo(2))這一行輸出的結果
pid 5653 486和pid 5653 2048,執行輸出動作都是parent process,但是輸出內容有parent process從myFoo()回傳的2048和child process從myFoo()回傳的486。原因是,parent process呼叫print(),當print()進行到一半時跳到myFoo()之中,在myFoo()中呼叫os.fork()從此一分為二,parent process執行完myFoo()後回傳給呼叫myFoo的process,也就是parent process,child process執行完myFoo()後回傳給呼叫myFoo的process,一樣也是parent process,所以才會輸出pid 5653 486和pid 5653 2048;print('pid', os.getpid(), 'finish')這一行是在一分為二後才會進行的,parent process和child process個別進行,才會輸出pid 5654 finish和pid 5653 finish這兩行。
2014年12月25日 星期四
Visual Studio - 調整方案組態控制項的寬度
開發環境:Visual Studio 2013
事件狀況:Visual Studio的工具列有很多控制項,其中的方案組態(Solution Configurations)預設寬度太小,只適合組態名稱Debug/Release使用,如果有自訂的組態名稱,容易顯示不完整。
解決方法:
事件狀況:Visual Studio的工具列有很多控制項,其中的方案組態(Solution Configurations)預設寬度太小,只適合組態名稱Debug/Release使用,如果有自訂的組態名稱,容易顯示不完整。
解決方法:
- 開啟自訂命令表單,從工具(Tool)→自訂(Customize)→命令(Commands)→工具列(Toolbar)→標準(Standard)。
- 在控制項中(Controls)選擇方案組態(Solution Configurations)。
- 點選修改選取範圍(Modify Selection)。
- 預設寬度(Width)是65,可以調整到更大的寬度。
2014年12月9日 星期二
Git - SSH連線自動登入
若是透過SSH連線使用Git,雖然會記錄帳號,但每次都還是需要輸入密碼。在Ubuntu等Linux環境使用Git時,若有系統服務是需要跟Git整合應用,在需要輸入密碼時就會遇到自動化問題,這時可以利用sshpass這個工具協助解決登入需要輸入密碼的問題。
$sshpass -p 密碼 Git指令與參數例如:
$sshpass -p password git fetch -q --all -p
Ubuntu - 建立工作排程
作業系統:Ubuntu 14.04
建立當前使用者的工作排程:
建立當前使用者的工作排程:
$crontab -e建立系統使用者的工作排程:
$sudo crontab -e查詢當前使用者的工作排程:
$crontab -l查詢系統使用者的工作排程:
$sudo crontab -l
一行就是一個工作排程,格式為
「分鐘 小時 日 月 星期 命令」,
例如
「5 * * * * echo task schedule」
為每個小時的第五分鐘時執行echo輸出task schedule字串。2014年11月6日 星期四
Visual Studio - 自訂巨集變數
開發環境:Visual Studio 2013
事件狀況:使用QT時,會需要QTDIR這個巨集變數(macro variable),該變數正常要定義在.vcxproj.user這個檔案中,可是在某些狀況下,專案會找不到QTDIR這個變數,QT沒有自動建立。
解決方法:
事件狀況:使用QT時,會需要QTDIR這個巨集變數(macro variable),該變數正常要定義在.vcxproj.user這個檔案中,可是在某些狀況下,專案會找不到QTDIR這個變數,QT沒有自動建立。
解決方法:
- 開啟屬性管理員視窗,從檢視(View)→屬性管理員(Property Manager)。
- 展開專案項目與組態項目,會看到字尾.user的屬性項目。
- 開啟.user的屬性項目,點選通用屬性(Common Properties)→使用者巨集(User-Defined Macros)。
- 點選加入巨集,就可以自訂QTDIR這個巨集變數,值就是QT函式庫的路徑。
訂閱:
文章 (Atom)