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