Android — JNI: печать матрицы в logcat не работает

Я пытался выдать матрицу через 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:    ]

Как я могу показать, что внутри матрицы?

3

Решение

Ваша проблема в следующей строке кода:

__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]);
1

Другие решения


По вопросам рекламы [email protected]