gpt4 book ai didi

c - printf 的类型转换,但其他情况则不然

转载 作者:行者123 更新时间:2023-11-30 15:48:17 25 4
gpt4 key购买 nike

我正在尝试在 JNI 中将字节转换为 float 。如果我在调用 GetByteArrayElements 方法时键入强制转换,它将不起作用。打印出浮点变量会打印出一个指针。我知道它是一个指针,因为通常它类似于“123451234993305848212225.000000”但是,如果我在 printf 语句中将其类型转换为 float,它会显示正确的值。为什么会出现这种情况?我有下面两组代码片段 -

jbyte *testTensor_data = (env)->GetByteArrayElements(NV21FrameData,0);
__android_log_print(ANDROID_LOG_INFO, "Torchandroid", "C test print: %f",(float) (testTensor_data[0]));

这有效。打印语句显示正确的数字。

jfloat *testTensor_data = (float*) (env)->GetByteArrayElements(NV21FrameData,0);
__android_log_print(ANDROID_LOG_INFO, "Torchandroid", "C test print: %f",(testTensor_data[0]));

第二种方法不起作用。问题是,简单地打印出 float 对我来说没有用。我需要将它用作 float 并将其作为 float 进行操作,这是第二种方法,但它不起作用。

最佳答案

这些例子并不相同。在第一种情况下,testTensor_data[0] 是一个 jbyte (sizeof(jbyte)==1),并且是一个 float code> (sizeof(jfloat)==4) 在第二种情况下。它打印的不是一个指针,而是大约 4 个字节,被转换为单个 float 。

为了方便地处理 12 位数据,您可以执行以下操作:

struct 3pix {
int a:12;
int b:12;
};

希望它不会被填充,然后访问 ((struct 3pix*)test_Tensor_data)->a 或类似的东西。我认为这并不容易。另一种解决方案 - 更自然 - 是使用按位运算,但您必须正确计算。

关于c - printf 的类型转换,但其他情况则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16878523/

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