最近在做一个项目,项目请求信息是以报文格式来发送的。并且信息还要以BCD压缩请问下在objective-c中,BCD压缩的方法怎么写呀,求大侠帮忙!急!
解决方案 »
- 【分享游戏代码】今天发现的好多的游戏代码
- 请问从别人的机器上考的xcode 3.2.6 可以直接使用吗?
- 准备做iPhone开发,先问一个数据访问的问题
- 非常好的iphone游戏开发资料
- ISO 中admob 的添加问题
- ios8 swift CFSocket怎么使用???
- 用XamarinIOS在VS下开发IOS怎么启动苹果模拟器?还是根本就启动不了?需要用到其他的工具? 有弄过这个的嘛? 给点详细指导吧 万分感谢
- 手游消息包多大正好?
- ios本地通知问题
- 怎么在xcode7里面添加 xcode5的 iOS空白模板
- 谁有ios企业产品发布的文档,谢谢
- TexturePacker 批处理 将pvr 文件转png
压缩型BCD码:一个字节可存放一个两位十进制数,其中高四位存放十位数字,低四位存放个位数字。如:56的压缩型8421 BCD码是0101 0110; 换句话说,这个过程不复杂,将数的各位的数字获取到,转换成二进制形式。
但是将数的各位数字获取到,转为二进制后,各个数字变成了8字节。问题是怎样让其中的两个数字(共16字节)压缩后,总共变成8个字节 这个方法怎么写 我是一个新手! 求大侠帮忙!
压缩的方法是:
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];//两位数字中的第二位数字
int temp=temp1 *16+temp2;
[changeStr appendFormat:@"%d",temp];
[pool release];
}
NSData *retData=[changeStr dataUsingEncoding:NSISOLatin1StringEncoding];
[changeStr release];
return retData;
}NSData *channelNum=[self ascii2hex:@"00"];
NSData *shopNum= [self ascii2hex:@"01"];
NSData *accountType=[self ascii2hex:@"02"];
[channelNum appendData:shopNum];
[channelNum appendData:accountType];
然后将channelNum用NSISOLatin1StringEncoding编码后通过AsyncSocket发送到服务器上的求大侠看看 代码哪儿有问题 求大侠帮忙!感激不尽!