将手机号码进行64位编码的函数.

winown 2008-03-21 01:26:24
我现在需要将手机号码进行64位的编码,采用Base64编码的64个基本字符作为编码的基本字符,分别对应0~63,然后进行编码,编码后手机号码为6个字符的字符串,例如:13356332255进行64进制编码后为“McGXTf”。
...全文
426 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdyhlp 2011-02-22
  • 打赏
  • 举报
回复
楼上有一个错误:num>1是不对的,应该是num>=1
while (num >= 1) {
b.append(BaseTable[(int) (num % 64)]);
num >>= 6;
}
runshine 2008-03-21
  • 打赏
  • 举报
回复
那是因为13356332255太大了,必须用长整型表示.
在老紫竹的代码修改下就可以了.

import java.io.*;
public class tt {
private final static char BaseTable[] = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 1
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 2
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 3
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 4
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 5
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 6
'4', '5', '6', '7', '8', '9', '+', '/' // 7
};

public static void main(String[] args) {
//String s="13356332255";
try{

BufferedReader streami = new BufferedReader(new InputStreamReader(System.in));
String s=streami.readLine();

long num = Long.parseLong(s);
StringBuilder b = new StringBuilder();
while (num > 1) {
b.append(BaseTable[(int) (num % 64)]);
num >>= 6;
}
System.out.println(b.reverse().toString());

} catch(Exception e){e.printStackTrace();}

}
}
winown 2008-03-21
  • 打赏
  • 举报
回复
多谢!
老紫竹 2008-03-21
  • 打赏
  • 举报
回复
请注意后面的那个是L, 不是1

整数在java里面是默认int而不是long 类型的!
winown 2008-03-21
  • 打赏
  • 举报
回复
提示:The literal 13356332255 of type int is out of range
winown 2008-03-21
  • 打赏
  • 举报
回复
多谢楼上的,但是用你的代码试了一下,把long num = 13356332255l; 这个换成13356332255 就通不过了。换成其他的号码也通不过。

老紫竹 2008-03-21
  • 打赏
  • 举报
回复
请参考,自己实现也不是很麻烦啊!!!

public class tt {
private final static char BaseTable[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 1
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 2
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 3
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 4
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 5
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 6
'4', '5', '6', '7', '8', '9', '+', '/' // 7
};

public static void main(String[] args) {
long num = 13356332255l;
StringBuilder b = new StringBuilder();
while (num > 1) {
b.append(BaseTable[(int) (num % 64)]);
num >>= 6;
}
System.out.println(b.reverse().toString());
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧