Мне нужно перевести метод Java, который использует объект ByteBuffer, на C. Как я могу точно воспроизвести приведенный ниже код, используя ByteBuffer Java? И какие типы данных я должен использовать для встраивания поплавков в массив байтов (в C)?
Код, о котором я говорил:
public void example(float[] floatData) {
//Initialize byte array "byteData"
byte[] byteData = new byte[floatData.length * 4];
ByteBuffer byteDataBuffer = ByteBuffer.wrap(byteData);
byteDataBuffer.order(ByteOrder.nativeOrder());
//Fill byte array with data from floatData
for (int i = 0; i < floatData.length; i++)
byteDataBuffer.putFloat(floatData[i]);
//Concat length of array (as byte array) to "byteData"
byte[] vL = intToByteArray(floatData.length / 2);
byte[] v = concatArrays(vL, byteData);
//Fill the remaining array with empty bytes
if (v.length < 1024) {
int zeroPad = 1024 - v.length;
byte[] zeroArray = new byte[zeroPad];
v = concatArrays(v, zeroArray);
zeroArray = null;
}
//[Do something with v[] here...]
}
FloatData[] может выглядеть примерно так: 1.00052387686001,-1.9974419759404,0.996936345285375
Да, я удалил это в последнюю минуту, потому что это не имело значения




Используйте calloc, чтобы выделить место (1024). Установите длину как первые sizeof(int) байты, затем используйте memcpy, чтобы скопировать массив с плавающей запятой в остальную часть выделенной памяти (sizeof(float)*length).
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void example(float * fAry, int length){
int i;
unsigned char* bAry = calloc(1024,1);
memcpy(bAry,&length,sizeof(int));
memcpy(bAry + sizeof(int), fAry, length*(sizeof(float)));
for (i=0; i<20; i++){
printf("%u,",bAry[i]);
}
free(bAry);
}
int main()
{
float ary[3] = {1.1,1.2,1.3};
example(ary,3);
return 0;
}
выход:
3,0,0,0,205,204,140,63,154,153,153,63,102,102,166,63,0,0,0,0,
Используйте
calloc, чтобы выделить место (1024). Установите длину как первый байт sizeof(int), затем используйтеmemcpy, чтобы скопировать массив с плавающей запятой в остальную часть выделенной памяти (sizeof(float)*length). Я нигде не вижуp[]?