我想從字節轉換爲在JNI中浮動。如果在調用GetByteArrayElements方法時輸入它,它不起作用。打印浮點變量會打印出指針。我知道它是一個指針,因爲它通常是類似於「123451234993305848212225.000000」的。但是,如果我在printf語句中將其類型轉換爲float,它將顯示正確的值。爲什麼會發生?我有以下兩組代碼片段 -類型鑄造for printf但不是其他
jbyte *testTensor_data = (env)->GetByteArrayElements(NV21FrameData,0);
__android_log_print(ANDROID_LOG_INFO, "Torchandroid", "C test print: %f",(float) (testTensor_data[0]));
This works。打印語句顯示正確的編號。
jfloat *testTensor_data = (float*) (env)->GetByteArrayElements(NV21FrameData,0);
__android_log_print(ANDROID_LOG_INFO, "Torchandroid", "C test print: %f",(testTensor_data[0]));
第二種方法不起作用。問題是,簡單地打印一個浮點數對我沒有用處。我需要使用它作爲一個浮動,並將其作爲浮動操作,這是第二種方法,它不起作用。
我把這些作爲來自Android攝像機的NV21格式的相機圖像。那些是每像素12位。那麼他們如何適應一個jbytearray呢? 此外,4個字節是32位,所以printf語句可以顯示給我的最多是2^32。它顯示了比這更大的數字。像幾個數量級更大。 – maverick1989
不,不,浮點的最大值遠遠大於2^32。像3.4×10^38。一個32位指針的最大值確實是2^32-1 – Elazar
@ maverick1989操縱12位有點複雜。你將不得不使用按位運算來提取它,操作普通的'int',然後再擠壓它。 – Elazar