Я работаю с F28335 от TI, сообщающегося последовательно (RS-232) с ПК.Как скопировать отдельные байты в двойную переменную?
В Matlab мне нужно рассчитать некоторые двойные числа и отправить их последовательно контроллеру.
Для этого, например, у меня есть 1.00E-5, и я преобразовать его в отдельные байты с помощью:
Time1On = typecast(Time1On, 'uint8');
Результат:
172 197 39 55
Тогда я преобразовать это в шестнадцатеричном и я сумел превратить его в строку, чтобы отправить его
ACC52737
я отправляю это последовательно к F28335, и я получить правильный Вэл ue в переменную Uint32 (позиция в массиве), но я не могу найти способ скопировать эти же отдельные байты в двойное значение, что даст мне то же самое исходное число фракций.
Я попытался литьем из массива uint32, где полученное значение правильно хранится:
dataDouble = (double) (*(RxPacket.RcvData + RxPacket.idxData));
Но я получаю это:
11100000000000000000000000000000 or 2.898602e+09
И я пытался хранить его как союз:
union doubleConstruct{
double Val;
Uint16 rxArray[2];
};
и сохранение 16 слов отдельно (i кодирует каждые 16 бит с контролем четности и декодирует 16 бит слова) в позиции массива, но двойной результат один и тот же ...
Кто-нибудь когда-либо разбивал удвоения на байты и отправлял их поочередно? Если да, то как вы позже составили и восстановили соответствующий двойной номер? Есть ли способ просто штамповать биты unsigned int в double?
Thx!
Вопросы, касающиеся порядка байтов? Две системы используют разные кодировки 'float'? –
'double' type принимает 64 бит, а не 32. Возможно, вам придется использовать' float'. Почему вы конвертируете в шестнадцатеричную строку? отправка четырех байтов недостаточно? – Shai
OKEI Мне удалось скопировать то, что я хочу, в переменную 'float' (Val), используя объявленный« union ». Я получаю именно бит ('ACC52737'), который я хочу в нем, но программа C интерпретирует этот float как' -560343e-12', в то время как я должен получать '1.00e-5'. Различные интерпретации одного и того же числа с плавающей точкой ??? – user2991509