[20191011]bash任意进制编码表.txt
[20191011]bash任意进制编码表.txt
--//bash可以使用任意进制编码转化为十进制.我想了解内部编码:
--//实际上受字符集的限制,"任意"进制有限制的.测试看看最大是多少.
1.input base最大支持多少.
$ echo $((16#F))
15
$ echo $((16#f))
15
--//说明:前面16表示16进制,F表示编码,结果输出10进制 15.
--//注意看大小写输出都是15.说明16进制编码 0-9,a-f 或者0-9,A-F.
$ echo $((64#F))
41
$ echo $((65#F))
-bash: 65#F: invalid arithmetic base (error token is "65#F")
--//65进制不支持.从这里看出ibase最大是64.看看64进制编码情况如何?
2.看看64进制编码:
$ echo $((64#1))
1
$ echo $((64#a))
10
$ echo $((64#A))
36
--//可以大概猜测bash 64进制编码从0开始. 0-9 , a-z , A-Z.这样仅仅62个编码.还剩下2个.
--//经常反复测试,你也可以写脚本测试.
$ echo $((64#@))
62
$ echo $((64#_))
63
--//这样完整的编码如下:
$ base64=$(echo {0..9} {a..z} {A..Z} @ _)
$ echo $base64
0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z @ _
--//定义成bash数组如下:
$ BASE64=($(echo {0..9} {a..z} {A..Z} @ _))
$ echo ${BASE64[*]}
0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z @ _
--//其它进制仅仅编码缩短,估计在36进制以内大小写可以混用.测试如下:
$ echo $((36#A))
10
$ echo $((36#a))
10
$ echo $((36#aA))
370
--//大小写混合没问题.在36进制以内.
$ echo $((37#a))
10
$ echo $((37#A))
36
--//36进制下大小写输入一致.而37进制就不是这样的情况了.
3.为什么要了解这些?
--//有了bash 64进制码表,我就可以使用bash转换oracle rowid的相关信息,虽然oracle rowid也是64进制编码,但是编码排列不一样.
--//而通过bash很容易转化成对应的10进制:
--//比如:
SCOTT@test01p> select rowid ,t1.* from t1 where id in (63,64);
ROWID ID T1NAME
------------------ ---------- ----------------------
AAAG2DAALAAAADDAA+ 63 t10000000063
AAAG2DAALAAAADDAA/ 64 t10000000064
SCOTT@test01p> @ rowid AAAG2DAALAAAADDAA+
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
28035 11 195 62 0x2C000C3 11,195 alter system dump datafile 11 block 195
--//rowid前6位是data_object_id. AAAG2D.
--//Rowid采用64位进制编码,编码如下:
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
--//码表就是 echo {A..Z} {a..z} {0..9} +/ | tr -d " "
$ echo AAAG2D | tr $( echo {A..Z} {a..z} {0..9} +/ | tr -d " ") $( echo {0..9} {a..z} {A..Z} @ _| tr -d " ")
0006S3
$ echo $((64#0006S3))
28035
--//完成能对上.再来看看block号=AAAADD.
$ echo $(( 64#$( echo AAAADD | tr $( echo {A..Z} {a..z} {0..9} +/ | tr -d " ") $( echo {0..9} {a..z} {A..Z} @ _| tr -d " ")) ))
195
$ echo $(( 64#$( echo AA+ | tr $( echo {A..Z} {a..z} {0..9} +/ | tr -d " ") $( echo {0..9} {a..z} {A..Z} @ _| tr -d " ")) ))
62
$ echo $(( 64#$( echo AA/ | tr $( echo {A..Z} {a..z} {0..9} +/ | tr -d " ") $( echo {0..9} {a..z} {A..Z} @ _| tr -d " ")) ))
63
--//也能对上.还可以使用这个将sql_id 推导出 hash_value.比如:
--//链接:http://blog.itpub.net/267265/viewspace-2142512/
select * from emp where deptno=10;
--//查询可以知道sql_id='557p4j1ggw222'.
SCOTT@book> select sql_text c70,sql_id,hash_value from v$sql where sql_id = '557p4j1ggw222';
C70 SQL_ID HASH_VALUE
---------------------------------- ------------- ----------
select * from emp where deptno=10 557p4j1ggw222 1593706562
SCOTT@book> select name c70,hash_value,full_hash_value from V$DB_OBJECT_CACHE where name like '%emp%' and hash_value=1593706562;
C70 HASH_VALUE FULL_HASH_VALUE
--------------------------------- ---------- --------------------------------
select * from emp where deptno=10 1593706562 8bb974871a4f8c88529ea4885efe0842
select * from emp where deptno=10 1593706562 8bb974871a4f8c88529ea4885efe0842
--//sql_id=557p4j1ggw222,sql_id采用32进制,编码是0-9,a-z .没有eilo这4个字符,正好32个.我以前提过去掉eilo主要目的是这些看起来像数字0,1.
$ echo $(( 32#$( echo 557p4j1ggw222 | tr $( echo {0..9} {a..z} | tr -d "eilo ") $( echo {0..9} {a..v} | tr -d " ")) ))
5953376663046588482
$ echo "obase=16;5953376663046588482" | bc -lq
529EA4885EFE0842
$ echo "obase=10;ibase=16;5EFE0842" | bc -lq
1593706562
--//输出10进制 5953376663046588482 转化16进制是 0x529ea4885efe0842,后8位0x5e5efe0842(16进制)就是hash_value.
--//0x5efe0842 = 1593706562
--//正好与输出的HASH_VALUE能对上.
4.附上rowid脚本如下:
$ cat rowid.sql
set verify off
column dba format a20
column text format a40
SELECT DBMS_ROWID.ROWID_OBJECT ('&1') "OBJECT",
DBMS_ROWID.ROWID_RELATIVE_FNO ('&1') "FILE",
DBMS_ROWID.ROWID_BLOCK_NUMBER ('&1') "BLOCK",
DBMS_ROWID.ROWID_ROW_NUMBER ('&1') "ROW",
lpad('0x'||trim(to_char(dbms_utility.MAKE_DATA_BLOCK_ADDRESS(dbms_rowid.ROWID_RELATIVE_FNO('&1'),dbms_rowid.ROWID_BLOCK_NUMBER('&1')), 'XXXXXXXX')), 10) rowid_dba,
DBMS_ROWID.ROWID_RELATIVE_FNO ('&1')
|| ','
|| DBMS_ROWID.ROWID_BLOCK_NUMBER ('&1')
"DBA",
'alter system dump datafile '
|| DBMS_ROWID.ROWID_RELATIVE_FNO ('&1')
|| ' block '
|| DBMS_ROWID.ROWID_BLOCK_NUMBER ('&1')
|| ' ;'
text
FROM DUAL;
[20191011]bash任意进制编码表.txt的更多相关文章
- poj1220 (高精度任意进制转换)
http://poj.org/problem?id=1220 高精度任意进制转换 代码是从discuss里找到的,据说是maigo神牛写的. 超精简!! 我自己第一写的时候,还把n进制先转成10进制, ...
- Python版任意进制转换
def decimalToAny(num,n): baseStr = {10:"a",11:"b",12:"c",13:"d&qu ...
- 2~62位任意进制转换(c++)
进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最 ...
- 【C/C++】任意进制转换
进制转换:R进制->10进制:10进制->R进制. #include<bits/stdc++.h> using namespace std; /*函数:r进制转换成10进制*/ ...
- C#十进制与任意进制的转换
/// <summary> /// 将十进制转换为指定的进制 /// </summary> /// <param name="Val">十进制值 ...
- itoa()、atoi()、任意进制转换
头文件:<stdlib.h> itoa --功能:将任意类型的数字转换为字符串.在<stdlib.h>中与之有相反功能的函数是atoi. atoi----功 能: 将字符串转换 ...
- python任意进制转换
python任意进制转换 import string def module_n_converter(q, s, base=None): """ 将自然数按照给定的字符串转 ...
- js模拟栈---进制转化。十进制转任意进制进制,任意进制转十进制
var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 class Stack{ constructor(){ items.se ...
- python的十进制与任意进制的转换
将任意进制转换成十进制 ", 8)) # 表示把8进制的54转换成十进制数并输出结果. # 8可以是2.8,10,16等进制数 将十进制转换成任意进制 def f(n,x): #n为待转换的 ...
随机推荐
- JAVA学习第二步,初级知识框架梳理
回顾往期的学习,才发现已经学习了这么多知识点.这里复制了其他创作者的一些梳理结合自己的梳理.总结了自己在Java学习入门阶段的知识点.笔记自己了也写了详细的两本 第一章 Java面向对象 1-1包的定 ...
- 漫谈golang设计模式 简易工厂模式
目前学习golang的主要需求是为了看懂TiDB的源码,下面我们复习一下简易工厂模式的思想 工厂类型分为三种,创建型模式,结构型模式,行为型模式. 简单工厂 使用场景:考虑一个简单的API设计,一个模 ...
- 松软科技web课堂:JavaScript 数组
JavaScript 数组用于在单一变量中存储多个值. 实例 var cars = ["Saab", "Volvo", "BMW"]; 什么 ...
- Thymeleaf对象的使用:基本对象
Thymeleaf中有许多内置对象,可以在模板中实现各种功能.下面有几个基本对象.Web对象常用有:request.session.servletContext.Thymeleaf提供了几个内置变量p ...
- flvjs的unload(),detachMediaElement(),destroy()报错,undefined,not a function解决方案
首先,真的被网上一堆各种转载复制粘贴坑了不少,最后直接到GitHub上flvjs的看作者的demo和docs才解决,具体如下. 1.引入flvjs文件,新建实例 var flvUrl = '直播流地址 ...
- 微信支付和微信支付通知基于sdk的说明(2)
前期准备工作 微信商户账户/密码(获取appid等信息) 微信公众号账户/密码(获取cert证书等信息,不做线上退款不需要证书) 下载php支付demo 从商户平台进入的话是以下界面或者直接搜索公众号 ...
- pjd-fstest The test suite checks POSIX compliance - 测试文件系统posix 接口兼容性
pjd-fstest: 参考网址:https://www.tuxera.com/community/posix-test-suite/ fstest是一套简化版的文件系统POSIX兼容性测试套件,它可 ...
- Memcached 基本语法 记录
set 命令:命令将value数值存储在指定的key中: set key flags exptime bytes [noreply] value key:键值 key-value 结构中的 key,用 ...
- sched_yield()和nanosleep()对进程调度的影响
关键词:sched_yield().nanosleep()等等. sched_yield()主动放弃CPU执行权,nanosleep()是睡眠一段时间后再唤醒. 1. sched_yield()实现 ...
- Java成员变量和局部变量区别
成员变量和局部变量区别 变量根据定义位置的不同,我们给变量起了不同的名字.如下图所示: 区别 在类中的位置不同 (重点) 成员变量:类中,方法外 局部变量:方法中或者方法声明上(形式参数) 作用范围 ...