简体   繁体   English

将字节转换为short或整数

[英]Convert Bytes to short or integer

I do have the following code that read in from a socket: 我有以下从套接字读入的代码:

Int8     buffer[102400];
UInt8     *buffer_p = buffer;;
int       bytesRead;
bytesRead = CFReadStreamRead(stream, buffer, 102400); 

The message i am expecting begin with short(2 bytes) short(2 bytes) integer(4 bytes). 我期待的消息以短(2字节)短(2字节)整数(4字节)开始。 I am not sure how to convert them to the corresponding types. 我不知道如何将它们转换为相应的类型。

I tried the following: 我尝试了以下方法:

uint16_t zero16 = NTOHS(buffer_p);
buffer_p += sizeof(uint16_t);
uint16_t msg_id16 = NTOHS(buffer_p);
buffer_p += sizeof(uint16_t);
uint32_t length32 = NTOHL(buffer_p);
buffer_p += sizeof(uint32_t);

or 要么

NSMutableData *data = [NSMutableData dataWithBytes:buffer length:bytesRead];

NSRange firstshort = {0,2};
NSRange secondshort = {2,2};
NSRange intrange = {4,4};
short zero;
[data getBytes:&zero range:firstshort];
short msgid;
[data getBytes:&msgid range:secondshort];
int length;
[data getBytes:&length range:intrange];

But non is working. 但非正在发挥作用。 Thanks in advance. 提前致谢。

You may want to look at OSByteOrder.h . 您可能想要查看OSByteOrder.h This defines a bunch of macros that can be used to read various integer types or to do byte-swapping. 这定义了一堆宏,可用于读取各种整数类型或进行字节交换。 Specifically, you could do something like 具体来说,你可以做类似的事情

uint16_t zero16 = OSReadBigInt16(buffer_p, 0);
uint16_t msg_id16 = OSReadBigInt16(buffer_p, 2);
uint32_t length32 = OSReadBigInt32(buffer_p, 4);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM