2014-12-12 2 views
-3

У меня есть код объектива-c. но я хочу преобразовать в код Java.Object-c конвертировать код для java-кода

Я знаю, Objective-C в NSData равна байт Java в [].

но я не знаю об эквиваленте остальной части ключевых слов.

Objective-C КОД

NSData * updatedValue = characteristic.value; 
    uint8_t* dataPointer = (uint8_t*)[updatedValue bytes]; 

    uint8_t flags = dataPointer[0]; dataPointer++; 
    int32_t tempData = (int32_t)CFSwapInt32LittleToHost(*(uint32_t*)dataPointer); dataPointer += 4; 
    int8_t exponent = (int8_t)(tempData >> 24); 
    int32_t mantissa = (int32_t)(tempData & 0x00FFFFFF); 

    if(tempData == 0x007FFFFF) 
    { 
     NSLog(@"Invalid temperature value received"); 
     return; 
    } 

    float tempValue = (float)(mantissa*pow(10, exponent));       
    self.tempString = [NSString stringWithFormat:@"%.1f", tempValue]; 

Пожалуйста, помогите мне

ответ

0

Не пытайтесь превратить его в Java, определить, что она делает, и записать его в Java.

Немногие образованные догадки, основанные на ваших знаниях программирования, должны помочь вам понять код. Это большое преимущество языков программирования над естественными языками, понимание программирования, и вы обычно можете сделать хорошее образованное предположение о значении фрагмента кода, даже если вы не знаете язык. В естественных языках одно и то же просто не выполняется, зная, скажем, что французский язык мало помогает в чтении хинди!

Итак, давайте посмотрим, uint8_t, вероятно, тип, какой он может быть? Ну int звучит как целое число, 8, вероятно, является величиной целого числа в битах - оно встречается во второй строке, которая также содержит слово bytes, а u, вероятно, означает беззнаковое. Поэтому предположим, что uint8_t - это неподписанное 8-битовое целое число. Теперь посмотрим на другие подобные типа слова, они имеют смысл так же?

Так что же делает код? Ну, вы поняли, что NSData * «нравится» byte[], так что бы код flags? Может быть, первый байт в массиве? Как насчет tempData? Ну есть 32 в типах здесь, и это четыре байта.

Получив tempData, что делает код? Некоторые манипуляции, которые приводят к tempValue, который является float. Возможно, float - это 32-битное число с плавающей запятой? Это, конечно, то, что есть на Java.

Однако здесь вы собираетесь ударить по стене. Если вы посмотрите, как 32-битное число с плавающей запятой представлено в IEEE 754 - наиболее распространенный способ представления чисел с плавающей запятой, вы обнаружите, что оно хранится в двоичном формате, а мантисса - фракция (см. Wikipedia) ,

Теперь посмотрим на код, pow(10, exponent) выглядит как 10 к власти, не 2 к власти. И выглядит ли мантисса, как ее рассматривают как фракцию?

Таким образом, независимо от того, какие 4 байта, которые вы предположили, преобразуются в float, он выглядит так: (a) они не являются типичным 32-битным поплавком или (b) код Objective-C неверен ...

Итак, вернемся к первому пункту - . Определите, что должен делать этот код, а затем писать его прямо в Java, не пытайтесь его преобразовать.

HTH

Смежные вопросы