Я не понимаю, как ряд байтов превращается в десятичное число.
Когда я регистрирую значение (NSData *) data1, я получаю:
(lldb) po data1
<00000000 207ce340 62706c69 73743030 d4000100 02000300 04000500 0612c012 c1582476 ... ...>
Предполагается, что первые 8 байтов содержат число, которое код извлекает следующим образом:
memcpy(&doubleNumber, [data1 bytes], sizeof(double));
Как сделать первые 8 байтов (которые, я думаю, 00000000 207ce340
да?) из data1 дают десятичное число 39905 ??
редактировать
В контексте этого вопроса необходимо выполнить преобразование в PHP: учитывая шестнадцатеричное представление, как в PHP можно преобразовать число и получить десятичное число (на самом деле это должно быть поплавок) 39905?
Ответ на этот вопрос в одном из комментариев ниже.
Используя Википедию и различные онлайн-конвертеры с прямым порядком байтов и IEEE 754, я полагаю, что у меня есть ответ на ваш вопрос: «Как первые 8 байтов (я полагаю, 00000000 207ce340, верно?) Data1 дают десятичное число 39905?»
00000000207ce340 Your starting value
40e37c2000000000 Switch to Big Endian to simplify following analysis
sign (leading) bit = 0 i.e. (0)100 in binary
exponent = 0x40e = 1038
IEEE 754 exponent bias = 1023
fraction = 0x37c2000000000 / 2**52 = 980901810929664 / 2**52
value = 2**(exponent − exponent bias) × (1.0 + fraction)
value = 2**(1038 - 1023) * (1.0 + (980901810929664 / 2**52))
value = 39905.0
Или в Unix dc:
16 k
2 1038 1023 - ^ 1.0 980901810929664 2 52 ^ / + * p
39905.0000000000000000
Других решений пока нет …