Я пытался выдать матрицу через logcat при использовании c ++ и JNI. Я совершенно новичок в этом деле, и после некоторого исследования я попробовал это с помощью следующего кода:
for(int i = 0; i<4; i++){
for (int j = 0;j<4; j++){
float v = Matrix[i][j];
__android_log_write(ANDROID_LOG_INFO , "Matrix: ", (char*)&v);
}
}
но этот подход просто дает мне:
07-22 09:21:56.517 14487-14582/name.example I/Matrix:﹕ [ 07-22 09:21:56.517 14487:14582 I/Matrix: ]
Как я могу показать, что внутри матрицы?
Ваша проблема в следующей строке кода:
__android_log_write(ANDROID_LOG_INFO , "Matrix: ", (char*)&v);
(char*)&v
переосмысливает байтовую структуру float
(v
) как строка C, которая не работает (и допускается только изредка). Вместо этого, чтобы преобразовать float
в строку, используйте sprintf
или же snprintf
или, если возможно, std::to_string
(для этого требуется C ++ 11):
char str[buffer_size];
snprintf(str, buffer_size, "%f", Matrix[i][j]);
__android_log_write(ANDROID_LOG_INFO, "Matrix: ", str);
или же
__android_log_write(ANDROID_LOG_INFO, "Matrix: ", std::to_string(Matrix[i][j]).c_str());
Как указано в комментариях, есть также __android_log_print
, который объединяет printf
синтаксис уже:
__android_log_print(ANDROID_LOG_INFO, "Matrix: ", "%f", Matrix[i][j]);