-------
android培训、
java培训、期待与您交流! ----------
public class SearchTableToHexDemo2 {
/**
* 查表法之进制转换
*/
public static void main(String[] args) {
int num=60;
toHexFromTable(num);
}
public static void toHexFromTable(int num){
char [] dataTables={
'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'
};
//定义一个临时容器来存储转换之后的数据
char [] arr=new char[8]; //00000-0000 0000-0000 0000-0000 0000-0000
//4个字节,每个字节8位。共即32位.byte:8位,即1个字节。但是为了简化表现形式它使用4位表示一个字节。
//定义一个角标操作数组中的元素
//每存储一个元素,角标自动增加一次
// int pos=0; //从0开始存
//从数组的最后一个角标开始存
int pos=arr.length; //我们这里初始化的时候就不让length-1了
//直接初始化为数组的长度
//为了优化这个程序。
//我们只想取出数据中的有效位,即只将有效位存储到数组中
while(num!=0){
//如果数字不是0我们就可以进行&和移位的操作
int temp=num&15;
//我们该如何存储数据到数组中了
//我们可以定义一个指针来进行的操作
//存储数据到数组中
// arr[pos++]=dataTables[temp];
// //存储完数据之后让角标自减
// arr[pos--]=dataTables[temp];
//我们在存储数据之后再让角标-1然后再存数据
arr[--pos]=dataTables[temp];
//再将高位右移
num=num>>>4;
}
//让这个要转换的数先去&15然后再用这个数做为索引,去查这张表
//8个4位
// for(int i=0;i<8;i++){
// //因为我们知道int类型是4个字节的,每个字节是8位的
// //而byte为了简化表现形式使用4位表示一个字节
// //先让这个数&15,取低4位
// int temp=num&15;
// //然后使用这个数作为索引去查表
System.out.print(dataTables[temp]+", ");
//
// //我们如何把数据存储到这个临时数组中了
// //我们是先从0开始存,即是和循环一样的操作。
// //所以可以和它遍历的时候一样
// arr[i]=dataTables[temp]; //我们把转换之后的数据存储到这个数组中
//
// //然后把这个数的高位左移
// num=num>>>4; //使用>>>是为了让高位不管是0还是1,空位都使用0进行补充
// }
//现在我们来看一下我们存储之后的效果
for (int i = pos; i < arr.length; i++) {
// for (int i = arr.length-1; i>=0; i--) {
System.out.print(arr[i]+",");
//C,3,0,0,0,0,0,0,
//我们要反着来做。这样好办。我们从后往前遍历即可
}
}
//第一步操作
/*C, 3, 0, 0, 0, 0, 0, 0, */
//这里是反的。我们想显示出3C的效果。那我们该如何做了。我们可以使用StringBuffer来做。但是我们没有学过
//它也是一个容器。我们可以使用一个容器来将转换之后的数据存储起来。数组就是一个容器它就可以存储数据
//第二步操作
//0,0,0,0,0,0,3,C, 我们想要去除空位,我们该如何做了
//我们是反着取的。我们想正着取。但是存的时候反着存了
//C,3,0,0,0,0,0,0,
//0000-0000 0000-0000 0000-0000 0011-1100
//我们现在实现这种效果
//我们只取数据的有效位,只移有效位,移到0就不移了。这样即减少了移位的次数还减少了循环的次数
// 实现下面的效果:C,3,
//我们想让它反着存该如何实现了
//,,,,,,3,c,
//,3,C,
//我们想去除掉数组中的多余的空位我们可以使用这种方式来操作
}