gpt4 book ai didi

C 中的 Java 字节缓冲区?

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:52 26 4
gpt4 key购买 nike

我需要将使用 ByteBuffer 对象的 Java 方法转换为 C。如何使用 Java 的 ByteBuffer 准确复制下面的代码?我应该使用什么数据类型将 float 嵌入字节数组(在 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 将 float 数组复制到分配内存的其余部分 (sizeof(float) *长度).

#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,

关于C 中的 Java 字节缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56499869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com