gpt4 book ai didi

android - 从 C 代码输出整数或字节到 LogCat

转载 作者:搜寻专家 更新时间:2023-11-01 08:08:48 26 4
gpt4 key购买 nike

我正在尝试向我的代码中添加打印语句以查找错误,但似乎无法获取整数、字节、jint 或除字符串以外的任何内容以在 LogCat 中显示。

#define LOG_INFO( info ) __android_log_print( ANDROID_LOG_WARN, "NATIVE CODE", info );


LOG_INFO( "c = " + c );

结果就是

c = 

有谁知道我做错了什么,或者这是否可能?我尝试过 jints、ints、chars、jchars 和 bytes(作为 c 的类型)。

最佳答案

语言是 C。C 没有内置的字符串类型;字符串实际上是 char 数组或指向 char 的指针。您不能既不添加数组也不添加指针。因此,+ 运算符或任何其他运算符都不会进行字符串连接。 C++ 是不同的,但我们现在先不谈。

__android_log_print() 的工作方式类似于 Java 的 String.format()。要将字符输出到 LogCat,请使用以下调用:

__android_log_print(ANDROID_LOG_WARN, "NATIVE CODE", "c=%c", (char)c);

如果你想输出几个变量——比如,一个 char 和一个 int,调用将是:

int n;
__android_log_print(ANDROID_LOG_WARN, "NATIVE CODE", "c=%c, n=%d", (char)c, n);

__android_log_print 是一个可变参数函数 - 它采用可变数量的参数(但不少于三个),除了前三个之外还有未知类型。额外参数的类型是从格式字符串中的格式说明符推导出来的——%-sequences。 %c 表示 char,%d 表示 int,%s 表示 char string 等等,自己查吧。

这是 printf 模式,在整个 C 世界中使用。它不容易进行宏化,除非您愿意引入单独的宏来输出 0、1、2 等参数。这样,它可能看起来像这样:

#define LOG_INFO0( info ) __android_log_print( ANDROID_LOG_WARN, "NATIVE CODE", info );
#define LOG_INFO1( info, p1 ) __android_log_print( ANDROID_LOG_WARN, "NATIVE CODE", info, p1 );
#define LOG_INFO2( info, p1, p2 ) __android_log_print( ANDROID_LOG_WARN, "NATIVE CODE", info, p1, p2 );

//...
LOG_INFO("c=%c", (char)c);

我在这里有意回避字符类型转换这个棘手的问题;对于 %c 格式说明符,该函数需要一个类型为 char 的参数,它与 jchar 不同。对于非 ASCII 字符的 jchar,此代码段将打印垃圾。

仅供引用:Java 类型和 C 类型之间的对应关系并不简单,实际上在某种程度上取决于平台。出于打印目的,您需要仔细观看。所以:

  • jchar 不是 char;它是 unsigned short。缩短为 char 会丢失数据。
  • jlong​​ 不是long,而是long long(64 位整数)
  • jboolean 是有符号字符(C 中没有 boolean 数据类型)
  • jbyte 是有符号字符(C 中没有 byte 数据类型)
  • jintint(在 Android 上)
  • jfloatfloat
  • jshort
  • jdoubledouble

关于android - 从 C 代码输出整数或字节到 LogCat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11852148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com