【发布时间】:2011-10-25 05:41:24
【问题描述】:
我的 C 语言不是很强,但我现在正在使用 NDK,我需要帮助以十六进制记录变量的地址。我一直在使用__android_log_print 打印通用日志消息,但是如何告诉 C 将变量的地址转换为 char 数组?
【问题讨论】:
标签: android c logging android-ndk
我的 C 语言不是很强,但我现在正在使用 NDK,我需要帮助以十六进制记录变量的地址。我一直在使用__android_log_print 打印通用日志消息,但是如何告诉 C 将变量的地址转换为 char 数组?
【问题讨论】:
标签: android c logging android-ndk
我从未使用过 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);
【讨论】:
__android_log_print 没有像printf 那样的格式,所以我需要在将地址传递给这个函数之前将其实际转换为字符串。
__android_log_print(SOME_PRIO, "sometag", "%p", &a); 的操作,那么抱歉。
我多次使用 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)
【讨论】: