Java C 中的字节缓冲区?
Java ByteBuffer in C?
我需要将使用 ByteBuffer 对象的 Java 方法转换为 C。如何使用 Java 的 ByteBuffer 准确复制下面的代码?我应该使用什么数据类型将浮点数嵌入字节数组(在 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
分配space (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,
我需要将使用 ByteBuffer 对象的 Java 方法转换为 C。如何使用 Java 的 ByteBuffer 准确复制下面的代码?我应该使用什么数据类型将浮点数嵌入字节数组(在 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
分配space (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,