你所用xa = ctypes.c_uint32(a).value
在Python是a
的十進制值asigning到xa
假設即a
是32位無符號整數做。在很多情況下(但並非總是)簡單地稱爲long。
但是,當您編寫ctypes.c_uint32(4029987).value
時,您已經使用十進制值的4個字節(長)。這就是爲什麼你再次得到4029987的十進制值。
bash(對於這個問題)的問題是bash沒有類似的類型概念。 shell中的所有值都是字符串和小數,同時。值根據需要進行轉換。
所以,在bash,包含的4029987十進制值的變量可以被指定爲(注意有沒有空格):
a=4029987
那你想用它做什麼?
知道十六進制值嗎?
$ printf '%08x' "$a"
003d7e23
打印該值的負數的十六進制表示形式?
$ printf '%08x' "-$a"
ffffffffffc281dd
這是64位(因爲我在64位系統中工作)。查看shell如何使用所需的表示。從文本字符串-4029987
到這種十進制數的64位表示。
當然,你可以在值削減到32位的值:
$ xa=$(printf '%08x' "-$a")
$ xa=${xa%????????}
$ echo $xa
ffc281dd
而且,十六進制數字(ffc281dd)早在小數該字符串:
$ echo $((16#$xa))
4290937309
這恰好重合用你在Python中獲得的東西。但是,再一次,這在shell中不起作用。
請爲樣本輸入添加樣本輸入和您想要的輸出到您的問題。 – Cyrus
我需要在bash中做同樣的事情...... –
您使用了兩次'ctypes.c_uint32(4029987).value'有不同的結果嗎? – Cyrus