[20251206]混合16进制与10进制的计算.txt

来源:这里教程网 时间:2026-03-03 22:56:59 作者:

[20251206]混合16进制与10进制的计算.txt --//有时候需要16进制与10进制数值的混合计算,使用bc就比较麻烦或者很难实现。 --//使用gdb相对简单 $ echo "p /d 0xa+10" | gdb -q (gdb) $1 = 20 (gdb) quit $ echo "p /x 0xa+10" | gdb -q (gdb) $1 = 0x14 (gdb) quit --//顺便贴一个dc的例子0xa+11: $ echo "16 i A A i 11 + 16 opq" | dc 15 $ echo "16 i A A i 11 + 10 opq" | dc 21 --//简单说明: --//16 i 表示输入16进制值,输入数值A,注意dc 16进制要使用大写英文字符。 --//A i  表示输入10进制值,因为前面16i已经确定输入16进制,这里只能输入A表示10进制,输入数值11 --//16 o 表示输出16进制。 --//先输入10进制可以这样写。 $ echo "11 16 i A + 16 opq" | dc  21 --//奇怪这样前面会出现1个空格。 --//我以前写过一个map在linux下在vim下使用。 # cat /usr/share/vim/vim74/plugin/gdb.vim "" gdb Low version for linux ""noremap <Leader>px Yp!!sed -e 's+^+p /x +'  >\| /tmp/gdb.txt && gdb -q  -x /tmp/gdb.txt \| awk 'NR==1{print $NF}'<CR>kA = <ESC>J ""noremap <Leader>pd Yp!!sed -e 's+^+p /d +'  >\| /tmp/gdb.txt && gdb -q  -x /tmp/gdb.txt \| awk 'NR==1{print $NF}'<CR>kA = <ESC>J ""noremap <Leader>po Yp!!sed -e 's+^+p /o +'  >\| /tmp/gdb.txt && gdb -q  -x /tmp/gdb.txt \| awk 'NR==1{print $NF}'<CR>kA = <ESC>J ""noremap <Leader>pt Yp!!sed -e 's+^+p /t +'  >\| /tmp/gdb.txt && gdb -q  -x /tmp/gdb.txt \| awk 'NR==1{print $NF}'<CR>kA = <ESC>Ji0b ""noremap <Leader>pb Yp!!sed -e 's+^+p /t +'  >\| /tmp/gdb.txt && gdb -q  -x /tmp/gdb.txt \| awk 'NR==1{print "0b"$NF}'<CR>kA = <ESC>J "" gdb high version for linux noremap <Leader>px Yp!!sed -e 's+^+p /x +' \| gdb -q \| awk 'NR==1{print $NF}'<CR>kA = <ESC>J noremap <Leader>pd Yp!!sed -e 's+^+p /d +' \| gdb -q \| awk 'NR==1{print $NF}'<CR>kA = <ESC>J noremap <Leader>po Yp!!sed -e 's+^+p /o +' \| gdb -q \| awk 'NR==1{print $NF}'<CR>kA = <ESC>J noremap <Leader>pt Yp!!sed -e 's+^+p /t +' \| gdb -q \| awk 'NR==1{print $NF}'<CR>kA = <ESC>Ji0b "" gdb for windwows, you must be installl cygwin + gdb. "" noremap <Leader>px Yp!!sed -e "s+^+p /x +" \| gdb -q \| gawk "NR==1{print $NF}"<CR>kA = <ESC>J "" noremap <Leader>pd Yp!!sed -e "s+^+p /d +" \| gdb -q \| gawk "NR==1{print $NF}"<CR>kA = <ESC>J "" noremap <Leader>po Yp!!sed -e "s+^+p /o +" \| gdb -q \| gawk "NR==1{print $NF}"<CR>kA = <ESC>J "" noremap <Leader>pt Yp!!sed -e "s+^+p /t +" \| gdb -q \| gawk "NR==1{print $NF}"<CR>kA = <ESC>Ji0b "" noremap <Leader>pb Yp!!sed -e "s+^+p /t +" \| gdb -q \| gawk "NR==1{printf "\0b\%s",$NF}"<CR>kA = <ESC>J "" noremap <Leader>pb Yp!!sed -e "s+^+p /t +" \| gdb -q \| gawk "NR==1{print \"0b\"$NF}"<CR>kA = <ESC>J --//bash shell也可以进行如下操作。 $ echo $(( 0xa+10 )) 20 $ printf "0x%x\n" $(( 0xa+10 )) 0x14 --//当然缺点不支持太大的数值进行计算,最大0x7fffffffffffffff.大于它变成负数,也可以使用中括号代替2个括号。 $ echo $[ 0x7fffffffffffffff ] $[ 0x8000000000000000 ] $[0xffffffffffffffff] 9223372036854775807 -9223372036854775808 -1 --// 带小数点的也不行。 $ echo $[ 12.2+2  ] -bash: 12.2+2  : syntax error: invalid arithmetic operator (error token is ".2+2  ") --//我以前在vim写了一个小插件bccalc_linux.vim,仅仅实现10->16,16->10,16->16. --//16与10进制的混合运算一直没有实现,bc实现难度太大,使用bash这个功能相对简单,做一点点更新。 "" computer && convert hexadecimal or convert  to hexadecimal or convert noremap  <Leader>jd YpIecho $[ <ESC>A ]<ESC>!!bash<CR>kA = <ESC>J noremap  <Leader>jh YpIprintf "0x%x\n"  $[ <ESC>A ]<ESC>!!bash<CR>kA = <ESC>J vnoremap <Leader>jd mz"fy'><ESC>o<ESC>"fpIecho $[ <ESC>A ]<ESC>!!bash<CR>y$d$`za = <ESC>pJ vnoremap <Leader>jh mz"fy'><ESC>o<ESC>"fpIprintf "0x%x\n" $[ <ESC>A ]<ESC>!!bash<CR>y$d$`za = <ESC>pJ --//顺便还发现该插件linux版本存在一些小问题,另外写一篇文章。

相关推荐