当前位置: 代码迷 >> Iphone >> 【ios】发送请求的信息 怎的通过BCD压缩
  详细解决方案

【ios】发送请求的信息 怎的通过BCD压缩

热度:57   发布时间:2016-04-25 06:12:31.0
【ios】发送请求的信息 怎样通过BCD压缩
最近在做一个项目,项目请求信息是以报文格式来发送的。并且信息还要以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];//两位数字中的第二位数字
  相关解决方案