我在C方面不是很强,但我现在正在使用NDK,我需要帮助以十六进制记录变量的地址。我一直在使用__android_log_print
打印通用日志消息,但是如何告诉C将变量的地址转换为char数组?
答案 0 :(得分:7)
我从未使用过Android NDK,但我假设__android_log_print
适用于printf格式字符。在这种情况下,您可以使用%p
。
假设我们有一个变量int a = 10;
。打印其地址:
printf("%p\n", &a); //This will print in hexadecimal
修改强>:
接受的答案:
__android_log_print(SOME_PRIO, "sometag", "%p", &a);
答案 1 :(得分:2)
我多次使用Android NDK并且在使用本机logcat之前尝试过。
__android_log_print(6, "deneme", "text"); -> this is error message
typedef enum android_LogPriority {
ANDROID_LOG_UNKNOWN = 0,
ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
} android_LogPriority;
并且在c源文件中包含标题
#include <jni.h>
#include <android/log.h>
比makefile看起来像
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := deneme-jni
LOCAL_SRC_FILES := deneme.c
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)