Проблема не в том, как вы кодируете число с плавающей точкой в байтах, а в том, что вы делаете с ним в следующий раз, пытаясь преобразовать его в строку.
Если вы хотите отправить 4 байта через сокет ( предполагая, что вы имеете в виду dart:io
Socket
), просто используйте метод add
.
Socket s;
var floatValue = 1.38;
var bytes = Uint8List(4)
..buffer.asByteData().setFloat32(0, floatValue, Endian.little);
print(bytes); // prints [215, 163, 176, 63]
s.add(bytes);
В этом примере вы начали с целевого байтового массива, а затем использовали его asByteData
установить одно значение. Это хороший способ создать структуру смешанных типов - int, float и т. Д. c. Если вам просто нужно преобразовать массив чисел с плавающей точкой в байты, вы можете сделать это немного проще:
var bytes = Float32List.fromList([floatValue]).buffer.asUint8List();
Я не уверен, что вам действительно нужно что-то делать со строками. Это то, что вы действительно хотите:
Socket s;
var message = 'some';
var id = 1;
var x = 1.38;
s.add(ascii.encode(message)); // choose the appropriate codec: ascii, utf8
s.add(Int16List.fromList([id]).buffer.asUint8List());
s.add(Float32List.fromList([x]).buffer.asUint8List());
// rather than adding each in turn, you could also form a longer byte array
// of the 3 elements and add that