最近在做一个项目,项目请求信息是以报文格式来发送的。并且信息还要以BCD压缩
请问下在objective-c中,BCD压缩的方法怎么写呀,求大侠帮忙!急!
------解决方案--------------------
我只有这么多分了,希望各位大侠帮帮!感激不尽!
------解决方案--------------------
压缩型BCD码:一个字节可存放一个两位十进制数,其中高四位存放十位数字,低四位存放个位数字。如:56的压缩型8421 BCD码是0101 0110;
换句话说,这个过程不复杂,将数的各位的数字获取到,转换成二进制形式。
------解决方案--------------------
谢谢cxsjabcabc的帮助!
但是将数的各位数字获取到,转为二进制后,各个数字变成了8字节。问题是怎样让其中的两个数字(共16字节)压缩后,总共变成8个字节 这个方法怎么写 我是一个新手! 求大侠帮忙!
------解决方案--------------------
我在网上找了一个BCD压缩的案例
压缩的方法是:
public static byte[] ascii2hex(byte[] bs) {
byte[] res = new byte[bs.length / 2];
System.out.println("--start--");
for (int i = 0, n = bs.length; i < n; i += 2) {
res[i / 2] = (byte) (Integer.parseInt(new String(bs, i, 2), 16));
}
return res;
}
//多个字节数组转成一个字节数组
public static byte[] sendbaowen(List list) {
Iterator it = list.iterator();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (it.hasNext()) {
try {
bos.write((byte[]) it.next());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
byte[] nn = bos.toByteArray();
return nn;
}
它是这样完成的
List list=new ArrayList();
byte[] a1= ascii2hex("00".getBytes());
byte[] a2= ascii2hex("01".getBytes());
byte[] a3= ascii2hex("02".getBytes());
list.add(a1);
list.add(a2);
list.add(a3);
byte baowen1[]=sendbaowen(list1);//多个字节数组转成一个字节数组
String uploadData = new String(baowen1, "ISO-8859-1");
然后将uploadData用socket发送
---------------------------
我通过调试
发现ascii2hex方法实际上就是将 一个两位数字转为十六进制 然后用getBytes()
sendbaowen 就是将多个字节数组转成一个字节数组 罢了
so写了如下的方法:
//数据压缩 实际上将dataStr的 每两位数字 转为16进制
-(NSData *)ascii2hex:(NSString *)dataStr
{
int len=[dataStr length];
if(len%2==1){ NSLog(@"转换的数据长度必须为偶数");return nil; }
NSMutableString * changeStr=[[NSMutableString alloc] initWithCapacity:50];
for(int i=0;i<len;i++)
{
NSAutoreleasePool *pool=[NSAutoreleasePool new];
NSString *temps1=[dataStr substringWithRange:NSMakeRange(i,1)];
int temp1=[temps1 intValue];//两位数字中的第一位数字
i++;
NSString *temps2=[dataStr substringWithRange:NSMakeRange(i,1)];
int temp2=[ temps2 intValue];//两位数字中的第二位数字