Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Igor-vrn
7 / 7 / 2
Регистрация: 14.12.2013
Сообщений: 94
#1

Преобразовать массив float чисел в массив типа byte и наоборот - Программирование Android

12.06.2014, 15:39. Просмотров 1320. Ответов 3
Метки нет (Все метки)

Привет форумчанам

У меня такая задача. Через bluetooth нужно передавать числа float (или double). bluetooth при передаче использует массив байт. Так вот мне нужно сначала перевести число float в его байтовое представление (byte[]) , а затем массив принятых байт на другом устройстве преобразовать в числа (их произвольное количество). Идеи есть, но колхозить не хочется. Хотелось бы услышать идеи достаточно быстро работающего алгоритма.
float[] -> byte[] и byte[] -> float[]

Пример:
324.443, 323.12, 12.324, 5.32, -12.323 и т.д. -> byte[]

byte[] -> 324.443, 323.12, 12.324, 5.32, -12.323
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать массив float чисел в массив типа byte и наоборот (Программирование Android):

Старший (первый) бит переменной типа byte - Программирование Android
Вопрос в следующем, как в переменной типа byte узнать значение первого бита (1 или 0)? Как это сделать через преобразование в строку а...

Динамические массивы. Дан массив записей из полей типа Char, Word, Byte. Преобразовать его в массив типа Longint - Free Pascal
FreePascal Выполнить обработку массивов в соответствии с заданием. Предусмотреть описание массивов как динамических. Само задание: Дан...

Вывести массив из 15 случайных чисел типа byte. Ввести целое число s. - Free Pascal
Вывести массив из 15 случайных чисел типа byte. Ввести целое число s. Вставить s в массив до первого элемента, который больше или равен s....

Ввести случайным образом (используя функцию random) двумерный массив чисел типа byte - Pascal
Ввести случайным образом (используя функцию random) двумерный массив чисел типа byte, число строк равно числу столбцов, размер задать с...

Преобразовать массив LPWSTR в массив BYTE - C++
Найти не могу нигде... На С# только нашел, и то не то... Получаю из EDIT текст: LPWSTR keyT = (LPWSTR)malloc(32 + 1 *...

Преобразовать сроку чисел CHAR в массив чисел типа int - C++
Помогите реализовать идею... Прегнать введённую сроку чисел char в массив int ... чтоб элемент char str соответсвовал int mas.... ...

3
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 565
12.06.2014, 16:46 #2
Цитата Сообщение от Igor-vrn Посмотреть сообщение
мне нужно сначала перевести число float в его байтовое представление (byte[]) , а затем массив принятых байт на другом устройстве преобразовать в числа (их произвольное количество)
Юзайте
Java
1
Float.floatToIntBits
и
Java
1
Float.intBitsToFloat
Вот небольшой пример конвертации флоата в масисв байт:
http://stackoverflow.com/questions/1...-read-by-c-app
Обратная конвертация тоже простая
0
Igor-vrn
7 / 7 / 2
Регистрация: 14.12.2013
Сообщений: 94
12.06.2014, 19:33  [ТС] #3
Цитата Сообщение от angryrobot Посмотреть сообщение
Float.intBitsToFloat
не совсем пойму в каком виде будут представлены биты в int. Беру из потока по 4 байта, дальше нужно как-то привести эти байты в один int, а затем воспользоваться методом выше. Как перевести?

При переводе в байтовую последовательность использовали побитовый сдвиг. Там понятно, но воспроизвести обратно не пойму как
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 565
13.06.2014, 22:46 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Igor-vrn Посмотреть сообщение
Там понятно, но воспроизвести обратно не пойму как
Вот пожалуйста, две функции выполняющие преобразования. Все работает как надо:


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Test {
 
    public static void main(String[] args) {
        System.out.println(bytesToFloat(floatToBytes(1234.5F)));
    }
    
    static float bytesToFloat(byte[] b) { 
        int floatBits =  b[3] & 0xFF | 
                  (b[2] & 0xFF) << 8 | 
                  (b[1] & 0xFF) << 16 |  
                  (b[0] & 0xFF) << 24;
        return Float.intBitsToFloat(floatBits);
    }
    
    static byte[] floatToBytes(float f) {
        int floatBits = Float.floatToIntBits(f);
        byte floatBytes[] = new byte[4];
        floatBytes[0] = (byte)(floatBits >> 24);
        floatBytes[1] = (byte)(floatBits >> 16);
        floatBytes[2] = (byte)(floatBits >> 8);
        floatBytes[3] = (byte)(floatBits);
        return floatBytes; 
    }
 
}
3
13.06.2014, 22:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 22:46
Привет! Вот еще темы с ответами:

Преобразовать string в массив byte[] - C++
Привет. У меня есть строка к примеру &quot;test&quot; в ней 4 байта? Перевести ее в unsigned char это просто каждый символ занести а массив? { 't',...

Преобразовать byte[] в float или int - Java SE
Имеется массив типа byte, необходимое мне значение занимает 2 байта, нужно эти 2 байта переконвертировать либо в float либо int. Каким...

Преобразование массива типа char в массив типа float - C (СИ)
Хорош ли следующий способ преобразования массива типа char в массив типа float? #include &lt;stdio.h&gt; #include &lt;locale.h&gt; void main()...

Преобразовать строку в массив и наоборот - PHP
Здравствуйте, есть строка $str= &quot;name=vasya, sex=men, phones=09999|08888|07778&amp;&quot;; нужно преобразовать ее в массив вида ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru