// // DataOutputStream.m // mtalk // // Created by maye on 13-10-24. // Copyright (c) 2013年 zuoye. All rights reserved. // #import "DataOutputStream.h" @implementation DataOutputStream - (id)init{ self = [super init]; if(self != nil){ data = [[NSMutableData alloc] init]; length = 0; } return self; } - (void)writeChar:(int8_t)v { int8_t ch[1]; ch[0] = (v & 0x0ff); [data appendBytes:ch length:1]; length++; } - (void)writeShort:(int16_t)v { int8_t ch[2]; ch[0] = (v & 0x0ff00)>>8; ch[1] = (v & 0x0ff); [data appendBytes:ch length:2]; length = length + 2; } - (void)writeInt:(int32_t)v { int8_t ch[4]; for(int32_t i = 0;i<4;i++){ ch[i] = ((v >> (i*8)) & 0x0ff); } [data appendBytes:ch length:4]; length = length + 4; } - (void)writeLong:(int64_t)v { int8_t ch[8]; for(int32_t i = 0;i<8;i++){ ch[i] = ((v >> ((7 - i)*8)) & 0x0ff); } [data appendBytes:ch length:8]; length = length + 8; } - (void)writeUTF:(NSString *)v { NSData *d = [v dataUsingEncoding:NSUTF8StringEncoding]; uint32_t len = (uint32_t)[d length]; [self writeInt:len]; [data appendData:d]; length = length + len; } - (void)writeBytes:(NSData *)v { int32_t len = (int32_t)[v length]; [self writeInt:len]; [data appendData:v]; length = length + len; } -(void)writeDataCount { int8_t ch[4]; for(int32_t i = 0;i<4;i++){ ch[i] = ((length >> ((i)*8)) & 0x0ff); } [data replaceBytesInRange:NSMakeRange(0, 4) withBytes:ch]; } - (NSMutableData *)toByteArray{ return [[NSMutableData alloc] initWithData:data]; } @end