即时通讯之输入流中读取基本数据
来源:互联网 发布:人工智能论文网站 编辑:程序博客网 时间:2024/05/21 17:04
相应的和写入一样,下面将读取的接口陈列如下:
读取 1 byte
- (int8_t)readChar;{ int8_t v; [data getBytes:&v range:NSMakeRange(len, 1)]; len++; return (v & 0x0FF);}
读取 2 byte
- (int16_t)readShort;{ int32_t ch1 = [self read]; int32_t ch2 = [self read]; if ((ch1 | ch2) < 0) { @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; } return (int16_t)((ch1 << 8) + (ch2 << 0));}
读取 4 byte
- (int32_t)readInt;{ int32_t ch1 = [self read]; int32_t ch2 = [self read]; int32_t ch3 = [self read]; int32_t ch4 = [self read]; if ((ch1 | ch2 | ch3 | ch4) < 0){ @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil]; } return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));}
读取 8 byte
- (int64_t)readLong;{ int8_t ch[8]; [data getBytes:&ch range:NSMakeRange(len,8)]; len += 8; return (((int64_t)ch[0] << 56) + ((int64_t)(ch[1] & 255) << 48) + ((int64_t)(ch[2] & 255) << 40) + ((int64_t)(ch[3] & 255) << 32) + ((int64_t)(ch[4] & 255) << 24) + ((ch[5] & 255) << 16) + ((ch[6] & 255) << 8) + ((ch[7] & 255) << 0));}
BCD时钟转换
- (BDSTime)readBCDTime{ struct BDSTime bcdTime; Byte year[2]; Byte month[1], day[1], hour[1], min[1], sec[1]; [data getBytes:&year range:NSMakeRange(len, sizeof(year))]; len += sizeof(year); [data getBytes:&month range:NSMakeRange(len, sizeof(month))]; len += sizeof(month); [data getBytes:&day range:NSMakeRange(len, sizeof(day))]; len += sizeof(day); [data getBytes:&hour range:NSMakeRange(len, sizeof(hour))]; len += sizeof(hour); [data getBytes:&min range:NSMakeRange(len, sizeof(min))]; len += sizeof(min); [data getBytes:&sec range:NSMakeRange(len, sizeof(sec))]; len += sizeof(sec); bcdTime.year = [self readBCDToYear:year]; bcdTime.month = bcdToInt(month, sizeof(month)); bcdTime.day = bcdToInt(day, sizeof(day)); bcdTime.hour = bcdToInt(hour, sizeof(hour)); bcdTime.min = bcdToInt(min, sizeof(min)); bcdTime.sec = bcdToInt(sec, sizeof(sec)); return bcdTime;}///bcd转intunsigned int bcdToInt(const unsigned char *bcd, int length){ int tmp; unsigned int dec = 0; for(int i = 0; i < length; i++) { tmp = ((bcd[i] >> 4) & 0x0F) * 10 + (bcd[i] & 0x0F); dec += tmp * pow(100, length - 1 - i); } return dec;}- (int16_t)readBCDToYear:(Byte *)dt{ Byte *year = dt; Byte y_high = year[0]; Byte y_low = year[1]; int16_t high = bcdToInt(&y_high, sizeof(y_high)); int16_t low = bcdToInt(&y_low, sizeof(y_low)); return high*100+low;}
0 0
- 即时通讯之输入流中读取基本数据
- 即时通讯之基本数据写入到输出流中
- 从标准输入流中读取数据
- 如何从输入流中读取数据到字符串中
- 使用输入流读取数据
- 从标准输入流中读取数据,并存储到文件中
- InputStream输入流,读取数据实例
- JDK 中从控制台读取输入的数据
- C语言:从文本文件中读取输入数据
- C和C++中读取不定数量的输入数据
- 即时通讯1- 用GCDAsyncSocket解决读取数据丢失
- elasticsearch的3个基本问题之读取数据
- 从输入流中读取整形和浮点型数据存储在实参所指的内存空间中
- 读取控制台输入的数据
- 第十五周上机实践项目——工资数据的输入(从文件中读取数据)
- Java中读取控制台输入
- java中向文本文件中读取数据之使用Scanner
- Socket读取输入流
- PHP时间比较和时间差如何计算
- 删除文件夹
- scala 集合
- java.lang.SecurityException: Permission Denial: opening provider的解决方法
- IOS学习 使用OCMock单元测试(一)安装
- 即时通讯之输入流中读取基本数据
- android Rx 技术
- apache服务器URL访问管理
- C、C++等语言常见符号作用总结
- ping实现原理
- 源码中TODO、FIXME和XXX的意义
- maven手动添加jar包
- 彻底理解MapReduce shuffle过程原理
- POJ 2689 Prime Distance(筛法求素数)