java - C中的Java ByteBuffer?
问题描述
我需要将使用 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
分配空间(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,
推荐阅读
- c# - 如何删除字符串 C# 中的所有空格
- c - 为什么我不能在 C 中的浮点数之后添加 \n 来创建另一行?
- reactjs - NPM 错误 SSL 例程:ssl3_get_record:decryption failed or bad record mac npm
- hadoop - 添加 BucketOwnerFullControl 配置后 GlueContext write_dynamic_frame 失败
- spring - 我试图在我的springboot项目中使用JPA,但是当我尝试运行spring boot应用程序时添加依赖项后,它显示错误
- reactjs - 如何从子级到父级获取状态变量?
- python - python - 如何从“tkcalender”库中获取出生日期
- javascript - onchange 事件之间的冲突
- android - Android 调用组件 w/listener 或让 viewmodel 调用组件与片段通信
- mongodb - 调用从 clojure 接受变量 args 的 java 方法