ios字节流的计算方式

不说直接撸代码

#import <Foundation/Foundation.h>

 

@interface ByteStreamData : NSObject

{

    int pos;

}

@property (assign) int pos;

 

-(instancetype)init:(int)value;

 

-(long long)getBytes2long:(Byte *)buf;

 

-(int)getBytes2int:(Byte *)buf;

 

-(short)getBytes2short:(Byte *)buf;

 

-(Byte)getBytes2byte:(Byte *)buf;

 

-(NSString *)getBytes2String:(Byte *)buf;

 

-(NSData *)getBytes2Data:(Byte *)buf;

 

 

-(void)putBytes2long:(long long)value buf:(Byte *)buf;

 

-(void)putBytes2int:(int)value buf:(Byte *)buf;

 

-(void)putBytes2short:(short)value buf:(Byte *)buf;

 

-(void)putBytes2byte:(Byte)value buf:(Byte *)buf;

 

-(void)putBytes2string:(NSString *)value buf:(Byte *)buf;

 

-(void)putBytes2data:(NSData *)value buf:(Byte *)buf;

 

@end

 

#import "ByteStreamData.h"

 

@implementation ByteStreamData

@synthesize pos;

 

-(instancetype)init:(int)value{

    pos = value;

    return self;

}

 

long long bytes2long(Byte *buf, int nOffset)

{

    long long nResult = 0;

    for(int i = nOffset+7; i >= nOffset; i --)

    {

        nResult <<= 8;

        nResult |= (buf[i] & 0xff);

    }

    return nResult;

}

 

 

 

int bytes2int(Byte *buf, int nOffset)

{

    int nResult = 0;

    for(int i = nOffset+3; i >= nOffset; i --)

    {

        nResult <<= 8;

        nResult |= (buf[i] & 0xff);

    }

    

    return nResult;

}

 

short bytes2short(Byte *buf, int nOffset)

{

    short nResult = 0;

    for(int i = nOffset+1; i >= nOffset; i --)

    {

        nResult <<= 8;

        nResult |= (buf[i] & 0xff);

    }

    

    return nResult;

}

 

Byte bytes2byte(Byte *buf, int nOffset)

{

    return buf[nOffset];

}

 

 

void long2bytes(long long nValue, Byte *buf, int nOffset)

{

    for(int i = nOffset; i < nOffset+8; i ++)

    {

        buf[i] = (Byte)(nValue >> (i-nOffset)*8);

    }

}

 

void int2bytes(int nValue, Byte *buf, int nOffset)

{

    for(int i = nOffset; i < nOffset+4; i ++)

    {

        buf[i] = (Byte)(nValue >> (i-nOffset)*8);

    }

}

 

void short2bytes(short nValue, Byte *buf, int nOffset)

{

    for(int i = nOffset; i < nOffset+2; i ++)

    {

        buf[i] = (Byte)(nValue >> (i-nOffset)*8);

    }

}

 

void byte2bytes(Byte nValue, Byte *buf, int nOffset)

{

    buf[nOffset] = nValue;

    

}

 

/*---------------------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------------------*/

-(void)putBytes2long:(long long)value buf:(Byte *)buf{

    long2bytes(value, buf,self.pos);

    self.pos+=8;

}

 

-(void)putBytes2int:(int)value buf:(Byte *)buf{

    int2bytes(value, buf,self.pos);

    self.pos+=4;

}

 

-(void)putBytes2short:(short)value buf:(Byte *)buf{

    short2bytes(value, buf,self.pos);

    self.pos+=2;

}

 

-(void)putBytes2byte:(Byte)value buf:(Byte *)buf {

    byte2bytes(value, buf,self.pos);

    self.pos+=1;

}

 

-(void)putBytes2string:(NSString *)value buf:(Byte *)buf

{

    int strLen = (int)[value lengthOfBytesUsingEncoding:NSUTF8StringEncoding];

    Byte *strBuf = (Byte *)[value cStringUsingEncoding:NSUTF8StringEncoding];

    int2bytes(strLen, buf, self.pos);

    self.pos += 4;

    for (int i=0; i<strLen; i++) {

        byte2bytes(strBuf[i], buf, self.pos);

        self.pos += 1;

    }

}

 

- (void)putBytes2data:(NSData *)value buf:(Byte *)buf

{

    int strLen = (int)value.length;

    Byte strBuf[strLen];

    [value getBytes:strBuf length:strLen];

    int2bytes(strLen, buf, self.pos);

    self.pos += 4;

    for (int i=0; i<strLen; i++) {

        byte2bytes(strBuf[i], buf, self.pos);

        self.pos += 1;

    }

}

 

/*---------------------------------------------------------------------------------------*/

 

-(long long)getBytes2long:(Byte *)buf{

    long long int value = bytes2long(buf, self.pos);

    self.pos+=8;

    return value;

}

 

-(int)getBytes2int:(Byte *)buf{

    int value = bytes2int(buf, self.pos);

    self.pos+=4;

    return value;

}

 

-(short)getBytes2short:(Byte *)buf{

    short value = bytes2int(buf, self.pos);

    self.pos+=2;

    return value;

}

 

-(Byte)getBytes2byte:(Byte *)buf{

    Byte value = bytes2byte(buf, self.pos);

    self.pos+=1;

    return value;

}

 

- (NSString *)getBytes2String:(Byte *)buf

{

    int strLen = bytes2int(buf, self.pos);

    self.pos += 4;

    Byte *strBuf = (Byte*)malloc(sizeof(Byte) * strLen);

    for (int i=0; i<strLen; i++) {

        strBuf[i] = bytes2byte(buf, self.pos);

        self.pos += 1;

    }

    NSString *value = [[NSString alloc] initWithBytes:strBuf length:strLen encoding:NSUTF8StringEncoding];

    free(strBuf);

    return value;

}

 

- (NSData *)getBytes2Data:(Byte *)buf

{

    int strLen = bytes2int(buf, self.pos);

    self.pos += 4;

    

    Byte *strBuf = (Byte*)malloc(sizeof(Byte) * strLen);

    for (int i=0; i<strLen; i++) {

        strBuf[i] = bytes2byte(buf, self.pos);

        self.pos += 1;

    }

    NSData *data = [NSData dataWithBytes:strBuf length:strLen];

    free(strBuf);

    return data;

}

 

@end

 

posted @ 2016-07-20 09:35  SKT_answer  阅读(1610)  评论(0编辑  收藏  举报