Форум программистов, компьютерный форум CyberForum.ru

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

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

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

12.06.2014, 15:39. Просмотров 1181. Ответов 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
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 15:39     Преобразовать массив float чисел в массив типа byte и наоборот
Посмотрите здесь:
Старший (первый) бит переменной типа byte Android
Android из c# byte получить картинку
Перевод double в byte[] Android
Как по byte[] data узнать размер снимка? Android
Как передать byte[] в WebView для отображения PDF ? Android
EditText читает цифры наоборот Android
Random float Android
Android Массив из json
Массив картинок Android
Массив кнопок Android
Android Запись в массив
Не перебирается массив Android

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

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

При переводе в байтовую последовательность использовали побитовый сдвиг. Там понятно, но воспроизвести обратно не пойму как
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
13.06.2014, 22:46     Преобразовать массив float чисел в массив типа byte и наоборот #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; 
    }
 
}
Yandex
Объявления
13.06.2014, 22:46     Преобразовать массив float чисел в массив типа byte и наоборот
Ответ Создать тему
Опции темы

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