1
저는 사용하고 싶은 4 바이트의 데이터 (부호없는 정수로 저장되어 있습니다)가 있습니다.버퍼를 부호없는 int로 변환하고 비트 마스크를 사용합니다.
이 1 바이트 데이터 인 경우에는, 이것을 이용하여 해결하고있다 :
자바//Java
buffer.get() & 0xFF
//Objective-C
uint32_t buffer;
[data getBytes:&buffer range:NSMakeRange(2, 1)];
uint32_t payloadLength = buffer & 0xFFu;
//data = d1021b53
//buffer = 897307; payloadLength: 27
, 바이트 4, 이것을 사용하여 수행되었다 :
//Java
buffer.getInt() & 0xFFFFFFFFL
//Current not working Objective-C code
uint32_t buffer;
[data getBytes:&buffer range:NSMakeRange(2, 4)];
uint32_t payloadLength = CFSwapInt32BigToHost(buffer);
//data: 0103940f b7626361
//buffer = 1656164244; payloadLength: 2484057954 (should be = ~80)
Objective- 들어 C/C, 4 바이트 및 비트 마스크 작업에 어려움을 겪고 있습니다.
누구든지 도움이 필요합니까?
나는 이것을 사용하는 기쁨이 없었다. 나는 원래의 부호없는 int를 사용하기 위해 목적 - c 1 바이트 예제를 변경하는 것을 반영하도록 원본을 변경했습니다. CFSwapInt32BigToHost (또는 Little)를 4 바이트 값과 함께 사용하려고하면 결과를 알 수 없습니다. 위의 1 바이트 예제에서 사용하더라도 작동하지 않습니다. 자바 0xFFFFFFFF 비트 마스크를 복제하는 방법에 대한 다른 제안 사항이 있습니까? –
이 경우 비트 마스크를 사용할 필요가 없습니다. 질문을 편집 할 수 있습니까 (주석에 코드를 넣는 것은 효과가 없습니다),이 답변을 바탕으로 현재 가지고있는 코드를 표시하고'NSLog (@ "% @ \ n % 8x \ n % 8x ", data, buffer, payloadLength)'? (길이가 길면'data'의 덤프 중 일부를 잘라냅니다!) – CRD
게시물을 편집하여 예제 값을 표시하고 현재 무엇이 작동하지 않는지 보여줍니다. –