社区
Java SE
帖子详情
BCD编码解码问题
thekll
2005-12-03 11:18:11
BCD码就是用四个2进制位表示一个10进制数,尝试着写了两个转换函数,但在实际应用中总是出现问题,请大家指教一下~
java基础类库中有没有对应的方法?
...全文
361
7
打赏
收藏
BCD编码解码问题
BCD码就是用四个2进制位表示一个10进制数,尝试着写了两个转换函数,但在实际应用中总是出现问题,请大家指教一下~ java基础类库中有没有对应的方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuzl32
2006-01-07
打赏
举报
回复
支持一下 thekll(silence) 最后的几句话!!
cscsuzjd
2006-01-07
打赏
举报
回复
谢谢你的方法,感觉不错
thekll
2005-12-04
打赏
举报
回复
移位有问题
thekll
2005-12-04
打赏
举报
回复
在一位搞硬件的同学提示下已解决,可能有更好的,也欢迎指正,贴出代码:
/**BCD码转为10进制串*/
public static String bcd2Str(byte[] bytes){
StringBuffer temp=new StringBuffer(bytes.length*2);
for(int i=0;i<bytes.length;i++){
temp.append((byte)((bytes[i]& 0xf0)>>>4));
temp.append((byte)(bytes[i]& 0x0f));
}
return temp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString();
}
/**10进制串转为BCD码*/
public static byte[] str2Bcd(String str){
if(str.length()%2!=0)
str="0"+str;
StringBuffer sb=new StringBuffer(str);
ByteBuffer bb=ByteBuffer.allocate(str.length()/2);
int i=0;
while(i<str.length()){
bb.put((byte)((Integer.parseInt(sb.substring(i,i+1)))<<4|Integer.parseInt(sb.substring(i+1,i+2))));
i=i+2;
}
return bb.array();
}
PS:我不是每天来都来CSDN,不过这里的氛围实在不敢恭维,我觉得既然是技术论坛,大家最好多关注一下技术方面的问题,但我看到的一些回复率比较高的帖子反倒是一些和技术关系不大的帖子~
这社会很浮躁,但我想既然了选择了程序人生,就该舍弃一些东西,冷静一些,多钻研以下技术。
thekll
2005-12-03
打赏
举报
回复
搞了一天了:各位看看
public class TestBCD {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(bcd2Str(str2Bcd("150194342340")));
}
/**BCD码转为10进制串*/
public static String bcd2Str(byte[] bytes){
StringBuffer temp=new StringBuffer(bytes.length*2);
byte b1;
byte b2;
for(int i=0;i<bytes.length;i++){
// 以下代码之所以有一个三元运算是因为程序运行时8被编码解码以后变成了-8
b1=(byte)(bytes[i]>>>4)==-8?8:(byte)(bytes[i]>>>4);
b2=(byte)((byte)(bytes[i]<<4)>>>4)==-8?8:(byte)((byte)(bytes[i]<<4)>>>4);
// 以下代码之所以有一个三元运算是因为程序运行时9被编码解码以后变成了-7
temp.append(b1==-7?9:b1);
temp.append(b2==-7?9:b2);
}
return temp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString();//去掉串首位零
}
/**10进制串转为BCD码*/
public static byte[] str2Bcd(String str){
if(str.length()%2!=0)
str="0"+str;
StringBuffer sb=new StringBuffer(str);
ByteBuffer bb=ByteBuffer.allocate(str.length()/2);
int i=0;
while(i<str.length()){
bb.put((byte)((Integer.parseInt(sb.substring(i,i+1)))<<4|Integer.parseInt(sb.substring(i+1,i+2))));
i=i+2;
}
return bb.array();
}
}
低调的小青蛙
2005-12-03
打赏
举报
回复
除了移位>>,<<,>>>以外,你还可以用 &, | 等操作,
a & 0x0F
a & 0xF0
然后再进行位移,就可以达到对半个字节进行操作
thekll
2005-12-03
打赏
举报
回复
java中处理数据的最小单位都是字节阿,对位的操作除了移位>>,<<,>>>以外还有别的操作吗?
java中
BCD
编码
NULL 博文链接:https://wenkaixuan.iteye.com/blog/2102006
磅房
bcd
编码
pb12.5
解码
程序
pb12为unicode,而PB9为aASNI,用网上查找的资料无法解决读取
问题
,费了很多时间来来查找资料 用过各种办法,读数还是不对。用c#封装过dll,用pB封装过dll,但是都无法实现。查询帮助资料是才找到
问题
所在,把测试的源代码放到网上,供需要着下载。当然速度会变慢,已经在项目上处理
JAVA二进制字节数组字符十六进制
BCD
编码
转换.doc
JAVA二进制字节数组字符十六进制
BCD
编码
转换
808协议的
编码
解码
这段时间公司在做808协议的
编码
与
解码
,就专门做了一个工具类,方便自己的调用,有byte,Word,DWord,
BCD
类型的
编码
解码
,还有普通的byte,int,string转换/2进制10进制16进制....等等
Android
BCD
和String的转换
这个工程里提供了一个工具类,是提供
BCD
码与String的互相转换的,有需要的可以下载
Java SE
62,629
社区成员
307,258
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章