一个bit的消息码流样例
00000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
00000000110001100000000000000000000000000000000000000000000001
00010111001101001011011010010111001101101011011110110111001110
10001100101011100100110111001100101011101000010111001100011011
01111011011010001000001100000000000000000000000000111000010010
01011100010111101100011011011110110111001110100011000010110001
101110100转换为字节数组的消息流
XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,03,18,00,00,
00,00,00,11,70,69,6D,2E,6D,6F,6E,74,65,72,6E,65,74,2E,63,6F,
6D,10,60,00,00,07,09,2E,2F,63,6F,6E,74,61,63,74---------------------------------------------------------------------这里假设测试一个较短是这样的字符串String binaryString = "101111001011110111101011";现在需要将该二进制字符串表示为一个16进制的字节数组,按这样的需求应该是每4位表示一个16进制1011 1100 1011 1101 1110 1011
b c b d e b最后我需要达到的结果应该是这样的一个字节数组byte[] bytes = {0xbc, 0xbd, 0xeb};
或者是
byte[] bytes = {bc, bd, eb};
需要这个编码字节数组
00000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000
00000000110001100000000000000000000000000000000000000000000001
00010111001101001011011010010111001101101011011110110111001110
10001100101011100100110111001100101011101000010111001100011011
01111011011010001000001100000000000000000000000000111000010010
01011100010111101100011011011110110111001110100011000010110001
101110100转换为字节数组的消息流
XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,XX,03,18,00,00,
00,00,00,11,70,69,6D,2E,6D,6F,6E,74,65,72,6E,65,74,2E,63,6F,
6D,10,60,00,00,07,09,2E,2F,63,6F,6E,74,61,63,74---------------------------------------------------------------------这里假设测试一个较短是这样的字符串String binaryString = "101111001011110111101011";现在需要将该二进制字符串表示为一个16进制的字节数组,按这样的需求应该是每4位表示一个16进制1011 1100 1011 1101 1110 1011
b c b d e b最后我需要达到的结果应该是这样的一个字节数组byte[] bytes = {0xbc, 0xbd, 0xeb};
或者是
byte[] bytes = {bc, bd, eb};
需要这个编码字节数组
String binaryString = "101111001011110111101011";
byte[] bys = binaryString2Bytes(binaryString);
System.out.println(bytes2HexSpace(bys));
}
public static byte[] binaryString2Bytes(String binaryString) {
if(binaryString == null || binaryString.length() == 0) {
return new byte[0];
}
if(!binaryString.matches("(?:[01]{4})+")) {
throw new IllegalArgumentException("binary sequences is invalid");
}
char[] chs = binaryString.toCharArray();
byte[] bys = new byte[chs.length / Byte.SIZE];
for(int i = 0; i < bys.length; i++) {
int num = 0;
for(int j = 0; j < Byte.SIZE; j++) {
num = (num << 1) | (chs[i * Byte.SIZE + j] - '0');
}
bys[i] = (byte)num;
}
return bys;
}
/**
* 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示,每个字节间采用
* 一个空格分隔
* @param bys 需要转换成 16 进制的字节数组
* @return
*/
public static String bytes2HexSpace(byte[] bys) {
char[] chs = new char[bys.length * 2 + bys.length - 1];
for(int i = 0, offset = 0; i < bys.length; i++) {
if(i > 0) {
chs[offset++] = ' ';
}
chs[offset++] = HEX[bys[i] >> 4 & 0xf];
chs[offset++] = HEX[bys[i] & 0xf];
}
return new String(chs);
}
/**
* 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示
*
* @param bys 需要转换成 16 进制的字节数组
* @return
*/
public static String bytes2Hex(byte[] bys) {
char[] chs = new char[bys.length * 2];
for(int i = 0, offset = 0; i < bys.length; i++) {
chs[offset++] = HEX[bys[i] >> 4 & 0xf];
chs[offset++] = HEX[bys[i] & 0xf];
}
return new String(chs);
}
private final static char[] HEX = "0123456789abcdef".toCharArray();
}
//在一看看 发现还是有机会强分 (高兴啊)
//看下面的Long类的两个API 你会发现什么呢 哈哈 将二进制字符串分成64个字符(8个字节的long)一组
//在用下面的函数不就行了
类 Long
java.lang.Object
java.lang.Number
java.lang.LongparseLong
public static long parseLong(String s,
int radix)
throws NumberFormatException将 string 参数解析为有符号的 long,基数
由第二个参数指定。字符串中的字符必须为指定基数中的数字(由 Character.digit(char, int) 是否返回
一个非负值来确定),除非第一个字符为 ASCII 字符的减号 '-' ('\u002D'),它表示一个负值。返回得到
的 long 值。
注意,不允许将字符 L ('\u004C') 和 l ('\u006C') 作为类型指示符出现在字符串的结尾处,而这一点
在 Java 编程语言源代码中是允许的——除非 L 或 l 以大于 22 的基数形式出现。 如果出现以下情形之一,则抛出 NumberFormatException 类型的异常: 第一个参数是 null 或零长度的字符串。
radix 小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。
任何字符串的字符都不是指定基数的数字,除非第一个字符是减号 '-' ('\u002d'),假定字符串的长度大于
1。
字符串表示的值不是 long 类型的值。
示例: parseLong("0", 10) returns 0L
parseLong("473", 10) returns 473L
parseLong("-0", 10) returns 0L
parseLong("-FF", 16) returns -255L
parseLong("1100110", 2) returns 102L
parseLong("99", 8) returns NumberFormatException
parseLong("Hazelnut", 10) returns NumberFormatException
parseLong("Hazelnut", 36) returns 1356099454469L参数:
s - 包含要解析的 long 表示形式的 String。
radix - 将在解析 s 时使用的基数。
返回:
由指定基数中的字符串参数表示的 long。
抛出:
NumberFormatException - 如果字符串不包含可解析的 long。toHexString
public static String toHexString(long i)以十六进制无符号整数形式返回 long 参数的字符串表示形式。
如果参数为负,则无符号 long 值为该参数加上 264;否则,它等于该参数。此值将被转换为不带附加前导 0 的十六进制(基数 16)ASCII 数字字符串。如果无符号大小为零,则该数字由单个零字符 '0' 表示 ('\u0030');否则,无符号大小表示形式中的第一个字符将不是零字符。下列字符都被用作十六进制数字: 0123456789abcdef
这些是从 '\u0030' 到 '\u0039' 和从 '\u0061' 到 '\u0066' 的字符。如果需要使用大写字母,则可以在结果上调用 String.toUpperCase() 方法:
Long.toHexString(n).toUpperCase()
参数:
i - 要转换为字符串的 long。
返回:
十六进制(基数 16)参数表示的无符号 long 值的字符串表示形式。
从以下版本开始:
JDK 1.0.2
最后我需要达到的结果应该是这样的一个字节数组 byte[] bytes = {0xbc, 0xbd, 0xeb};
或者是
byte[] bytes = {bc, bd, eb};
需要这个编码字节数组byte里存放的是数值,与其赋值时用的是十进制还是十六进制无关
要打印出的结果是"byte[] bytes = {0xbc, 0xbd, 0xeb};"
则是byte别一种表示的形式,转换一下就可以了
或者是
byte[] bytes = {bc, bd, eb}; 请问这个byte数组中bc是什么意思是指 byte数的十六进制表示吗
那LZ的意思是把二进制的字符消息流 转换为 byte为单位的数字形式
就用Byte类吧 8个字符转换一次
转换的书存入数组 内存里面肯定是二进制的表示方式也就可以看成16进制的表示方式
不过话说回来LZ的表叙有点混乱 特别是那个Byte数组为什么是{bc, bd, eb}
若bc等是十六进制数的表示 那不多此一举吗 因为内存中被来就是这个样子parseByte
public static byte parseByte(String s,
int radix)
throws NumberFormatException将 string 参数解析为一个有符号的 byte,
其基数由第二个参数指定。除了第一个字符可以是表示负值的 ASCII 负号 '-' ('\u002D') 之外(这取决
于 Character.digit(char, int) 是否返回非负值),该 string 中的字符必须都是指定基数的数字。返回得到的 byte 值。
如果出现下列任何一种情况,则抛出一个 NumberFormatException 类型的异常: 第一个参数为 null 或是一个长度为零的字符串。
基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。
字符串的任一字符不是指定基数的数字,第一个字符是负号 '-' ('\u002D') 的情况除外(但此时字符串的长
度应超过 1)。
字符串所表示的值不是 byte 类型的值。 参数:
s - 要解析的包含 byte 表示形式的 String
radix - 在解析 s 时使用的基数
返回:
以指定基数表示的 string 参数所表示的 byte 值
抛出:
NumberFormatException - 如果该 string 不包含一个可解析的 byte。
什么样的内容或者形式向同步服务器发起同步,当然终端必须符合syncML协议才能正确
解析这样的码流,终端的类型可以有多种(手机、PDA或者电脑等),该码流是需要经过
重复多次的BASE64和MD5加密的,所以有些麻烦。
创建 Java HTTP Servlet
Java应用程序内嵌图像资源的方法探讨
JAVA中的指针,引用及对象的clone
运用加密技术保护Java源代码
用Java开发代理服务器
关于Java中文问题的几条分析原则
使用JAVA中的动态代理实现数据库连接池
Java 中的异步网络编程
垃圾收集器与Java编程
Java 实现 POS 打印机无驱打印
JSP/Servlet 中的汉字编码问题
用jsp进行数据分页显示的一个实现
错误的堆大小产生的 "堆问题"
Tomcat全攻略
内存详解
压缩 SOAP
Merlin 的魔力: 异常和日志记录
构建自己的监测工具
Struts 与 Velocity 的集成
链式违例机制
使用 XStream 把 Java 对象序列化为 XML
关注性能: 调优垃圾收集
线程池的介绍及简单实现
使用 Eclipse 远程调试 Java 应用程序
使用 Eclipse 帮助系统为项目编制文档
在运行时将数据与 XSLT 样式表集成
技巧: 从 XSL 样式表输出 HTML
提示和技巧:JDBC 提示
一劳永逸的数据库编码解决方案
使用 Eclipse 平台进行调试
掌握 Ajax,第 1 部分Merlin 的魔力
http://www.ibm.com/developerworks/cn/java/j-merlin/index.htmlOracle
http://www.net130.com/Class/oracle_tech_jc/oracle_tech_jc01.html