2010-05-28 4 views
2

.Net의 BitConverter.GetBytes() 메소드에 해당하는 Objective C가 있는지 궁금합니다.목표 C BitConverter 동등한

예를 들어, C#으로, I는 다음과 같이 쓸 수있다 :

바이트 [] = lengthPrefix BitConverter.GetBytes (message.length)를;

무엇이 목표 C에 해당합니까?

일부 예제 코드는 크게 감사하겠습니다.

미리 감사드립니다.

답변

2

특정 엔디안 필요가없는 경우 :

unsigned char * lengthPrefix = (unsigned char *)&message.length; 

또는 필요한 경우, 32 비트 버퍼에 복사합니다.

unsigned char lengthPrefixBuffer[4]; 
memcpy(lengthPrefixBuffer, &message.length, 4); 
+0

일시적으로 반환 된 정수의 주소를 사용하고 있습니다. 이 컴파일합니까? 레지스터에있을 수 있습니다 ... 'NSInteger length = message.length; unsigned char * lengthPrefix = (unsigned char *) & length;' –

+0

+1 memcpy 버전의 경우에 sizeof를 사용했을 지 모르지만 꽤 좋지는 않습니다 (NSInteger == long). –

+0

엔디안 관련 바이트 스와핑을 수행하기 위해 Foundation에는 전체로드 기능이 있습니다. http://developer.apple.com/mac/library/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#jumpTo_181 – JeremyP

0

Sin Objective-C는 뿌리가 C이므로 비트 연산자를 사용하여 비슷한 결과를 얻을 수 있습니다.

자동으로 COCOA/COCOA-TOUCH 프레임 워크에서 .NET의 BitConverter와 같은 기능을 수행하는 기능은 없습니다.

0

바이트 [] lengthPrefix = BitConverter.GetBytes (message.length); 그에 대한 상당

long ID = length; 
Byte *some = (Byte*)&ID; 
    Byte b1 = some[0]; 
    Byte b2 = some[1]; 
    Byte b3 = some[2]; 
    Byte b4 = some[3]; 
Byte lengthPrefix[]= {b1,b2,b3,b4}; 

당신이 필요로 얼마나 많은 바이트 주요 아이디어 ... 그렇게 곳이 작업을하기 전에 당신이 원하는 길이 얼마나 많은 바이트 당신이 원하는을 지정하는 것입니다. 그래서 오랫동안 그것은 충분한 4 바이트입니다. uint32 들어 당신은 아마 더 필요합니다.