Objective C BitConverter Эквивалент

2

Мне интересно, есть ли Objective C, эквивалентный методу .Net BitConverter.GetBytes().

Например, в С# я могу написать что-то вроде этого:

byte [] lengthPrefix = BitConverter.GetBytes(message.length);

Что бы эквивалент был в Objective C?

Какой-то примерный код будет с благодарностью.

Спасибо заранее.

Теги:

3 ответа

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 хотя и не очень должно работать (NSInteger == long), хотя я бы, вероятно, использовал sizeof на всякий случай в версии memcpy.
Показать ещё 2 комментария
0

byte [] 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 вам, вероятно, потребуется больше.

0

Sin Objective-C является C в своих корнях, вы можете использовать побитовые операторы для выполнения чего-то подобного.

В структуре COCOA/COCOA-TOUCH ничего не будет сделано, что сделает это автоматически для вас (например,.NET BitConverter).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню