用Linux/Unix命令把十六进制转换成十进制(转)

那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了。

先列两种简单的方法:

1) echo 自己就能实现,相当简单。不过,不知道如果要从十进制转换回十六进制能怎么写。

    ]$ echo $((0xac))
    172

2) printf 也可以哦,十六进制和十进制互相转换都没问题

    ]$ printf %d 0xac
    172
    ]$ printf %x 172
    ac 

然后,稍微麻烦一点的是 bc 这个命令。虽然网上介绍的人很多,可是到底 bc 的那两个参数是怎么用的,还是不太明白,感觉自己也是从结果推原因而已,并不真的明白这个命令的参数如此设计的意义。不管怎样,先把例子写在这里,将来再研究吧。

3) bc 的作用:十六进制和十进制互转,十进制和二进制之间也可以转换。

把十六进制转换成十进制
    ]$ echo 'ibase=16;obase=A; AC'|bc   
    172
    ]$ echo 'ibase=16;obase=1010; AC'|bc   (Linux)
     0172
    > echo 'ibase=16;obase=1010; AC'|bc    (Unix)
    output base is too large
    172

注意这里:在 Unix 里面执行的时候会报这么个错误,但还是会有结果。
    ]$ echo 'ibase=16;AC' | bc 
    172

把十进制转换成十六进制
    ]$ echo 'ibase=10;obase=16;172'|bc 
    AC
    ]$ echo 'obase=16;172'|bc
    AC

把十进制转换成二进制
    ]$ echo 'obase=2;172'|bc         
    10101100
把二进制转换成十进制
    ]$ echo 'ibase=2;10101100'|bc                
    172

貌似 ibase 和 obase 这两个参数的 default 值就是10(十进制),所以似乎如果不写的话,ibase 代表输入的参数是十进制,obase 代表输出的值是十进制。也就是说,不是十进制的时候才注明,似乎这样就不会错了。

恩,再研究研究。

http://blog.sina.com.cn/s/blog_a3052b4a0100z4nk.html

时间: 2024-08-18 10:55:26

用Linux/Unix命令把十六进制转换成十进制(转)的相关文章

c-十六进制转换成十进制,大神们帮忙解释一下while循环中的if语句意思

问题描述 十六进制转换成十进制,大神们帮忙解释一下while循环中的if语句意思 #include #include #include int main() { char a[9]; gets(a); int len,i=0; long long sum=0; double x; len=strlen(a); while(len) { if(a[len-1]>='A'&&a[len-1]<='F') x=(a[len-1]-'7')*pow(16,i++); else x=x=

c++-蓝桥杯 十六进制转换成八进制

问题描述 蓝桥杯 十六进制转换成八进制 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000. 输出格式 输出n行,每行为输入对应的八进制正整数. [注意] 输入的十六进制数不会有前导0,比如012A. 输出的八进制数也不能有前导0. 样例输入 2 39 123ABC 样例输出 71 4435274 [提

c语言-c++ 进制转换由十六进制转换成二进制

问题描述 c++ 进制转换由十六进制转换成二进制 void change16_2() { printf("十六进制->二进制 "); int i,a,b,c,d,k; int x[3]; char m[3]={0,0,0},n[3]; printf("转换数(十六进制):"); scanf("%s",m); for(i=0;i { if(m[i]>='A'&&m[i]<='F') { x[i]=10+m[i]-6

二进制-怎么用c语言实现十六进制转换成八进制?

问题描述 怎么用c语言实现十六进制转换成八进制? 提示是先把十六进制转换成二进制,再把二进制转换成八进制,求大神帮忙!! 解决方案 用不着任何转换. 计算机里面,都是二进制数. 以 16 进制数.八进制数显示,即可. 解决方案二: C语言自带进制转换函数atoi和itoa,可以直接调用,用法可搜索查阅.如果自己实现的话,参考链接:http://zhidao.baidu.com/link?url=C-58nz8p9AnCLmVquK__gfHMwafY3WWnw5vWvUMq255wMXYtkGd

ip地址转换成十进制实现程序

,以"61.175.232.30"这个IP地址为例,IP地址转换成数字串方法如下:先将"61.175.232.30"转换为十六进制"3d.af.e8.1e",然后去掉小数点后,变为"3dafe81e",最后将这个十六进制数转换为十进制"1034938398",那么"61.175.232.30"就变为"1034938398"了. 方法一:  代码如下 复制代码 publ

watch:定期重复Linux / Unix命令

服务器管理员需要维护系统并保持更新和安全.每天需要运行大量的指令.有些系统进程会记录日志.这些日志不断更新.为了检查这些更新,需要重复地执行命令.比如,为了读取一个日志文件需要使用head.tail.cat等命令.这些命令需要重复地执行.而watch命令可以用于定期地执行一个命令. Watch 命令 watch是一个简单的命令,只有几个选项.watch命令的基本语法是: watch [-dhvt] [-n <seconds>] [--differences[=cumulative]] [--h

把Linux的私钥文件id_rsa转换成putty的ppk格式

问题:   默认在Linux下产生的私钥文件ssh-rsa格式,ssh远程连接工具putty是不识别的,putty只能识别自己的ppk格式.   需求:   把ssh-rsa格式的私钥文件转换为putty能识别的ppk格式.   具体步骤:   一.下载转换工具PuTTYgen   https://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe   二.开始转换   1.运行puttygen     2.点击Conversions菜单项中

十进制转换成十六进制和16进制转2进制的实现

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() { int i,v; char bs[33]; char b[33]; char hs[9]; char h[9]; char s[4]; char *e; // 十进制整数转二进制串: i=1024; ltoa(i,b,2); sprintf(bs,"%032s&quo

字符编码-vc++编码问题!把十六进制字符串转换成文字!

问题描述 vc++编码问题!把十六进制字符串转换成文字! 假设我有一个cstring a=""1A 2B"" 如何转换成文字并赋值给另外一个cstring? 解决方案 char temp[100];char src[100];strncpy(src (LPCTSTR)a 100);for (int i = 0; i < (a.GetLength() + 1)/3; i++){ temp[i] = (char)(func(src[i * 3]) * 16 + f