【问题标题】:Print full data of char* pointer?打印 char* 指针的完整数据?
【发布时间】:2020-07-21 15:29:24
【问题描述】:

我是 C++ 新手,我想在将 char* 指针写入文件之前显示它的数据,但输出只有 5 个前字节。我不知道它有什么问题。我正在使用 __android_log_print 来显示日志。

这是将数据写入文件的代码:

Logcat 展示:

WriteUnbuffered 文件名 = /data/user/0/com.abc.helloleveldb/databases/leveldb/000003.log

WriteUnbuffered size = 37 ,data before encrypt = ��� -> only 5bytes .

但是数据写入整个文件,2对数据(test: okok and test1: hello)

如果您有任何建议,请帮助我。谢谢

【问题讨论】:

  • %dsize 的不正确格式说明符,这会导致未定义的行为
  • @M.M 我看不出尺寸有什么问题。
  • 嗯,有一个问题,我已经指出了,修复它是个好主意
  • @MM 谢谢。我将 %d 更改为 %zu。
  • "%s" 需要一个以空字符结尾的字符串。您的数据是否以空值终止?如果没有,您应该避免使用任何依赖空终止缓冲区的 C 字符串函数。

标签: c++ leveldb


【解决方案1】:

data 处的缓冲区内容看起来是二进制数据,不适合传入%s 格式。

我建议单独遍历每个字符(字节)并记录十六进制值,如下所示:

for(size_t i=0; i<size; ++i) {
    LOGD("WriteUnbuffered data[%zu]=0x%02x", i, (data[i])&0xff);
}

【讨论】:

  • 感谢您的帮助,我尝试打印十六进制,但它只是这样的数字:WriteUnbuffered data[0]=0xad, string = 173 WriteUnbuffered data[1]=0x46, string = 70 WriteUnbuffered data[ 2]=0xd4 , 字符串 = 212 WriteUnbuffered data[3]=0x20 , string = 32 WriteUnbuffered data[4]=0x1e , string = 30 WriteUnbuffered data[5]=0x00 , string = 0 WriteUnbuffered data[6]=0x01 , string = 1 ....
  • 你知道我是否想加密 char *data 吗?
  • @thanhlv 值如 0x20、0x1e 是存储在缓冲区中的字节值。如果您知道这些字节值的含义是什么,您应该能够解释输出。目前尚不清楚为什么要将缓冲区发送到 LOG。我也无法回答您是否要加密数据。您的问题只是关于如何记录缓冲区的所有字节。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多