You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android下如何将std::vector<BYTE>转为十六进制字符串并通过__android_log_print输出

Android平台下将std::vector转换为十六进制字符串并输出的实现方法

核心实现思路

遍历std::vector<BYTE>中的每个字节,将其格式化为0xXX的十六进制形式,拼接成空格分隔的字符串,最后通过__android_log_print输出到Android日志系统。

完整代码示例

首先确保引入必要的头文件:

#include <vector>
#include <sstream>
#include <iomanip>
#include <android/log.h>

// 若环境未定义BYTE,手动声明别名
#ifndef BYTE
typedef unsigned char BYTE;
#endif

方法一:使用stringstream(简洁易读)

通过C++标准库的stringstream完成格式化拼接:

std::string byteVectorToHexString(const std::vector<BYTE>& input) {
    std::stringstream ss;
    // 设置十六进制、大写格式、补零填充
    ss << std::hex << std::uppercase << std::setfill('0');
    
    for (size_t i = 0; i < input.size(); ++i) {
        if (i != 0) {
            ss << " "; // 非第一个字节前添加空格分隔
        }
        // 强制转换为int避免BYTE被当作字符处理,setw(2)确保两位十六进制数
        ss << "0x" << std::setw(2) << static_cast<int>(input[i]);
    }
    
    return ss.str();
}

方法二:使用snprintf(性能更优)

对于数据量较大的场景,可使用C风格的snprintf直接操作内存,减少字符串拷贝:

std::string byteVectorToHexString(const std::vector<BYTE>& input) {
    if (input.empty()) {
        return "";
    }
    
    // 计算所需字符串总长度:每个字节占"0xXX "(5字符),最后一个字节无末尾空格,总长度为5*N -1
    const size_t totalLength = input.size() * 5 - 1;
    std::string result(totalLength, '\0');
    char* bufferPtr = &result[0];
    
    for (size_t i = 0; i < input.size(); ++i) {
        if (i != 0) {
            *bufferPtr++ = ' ';
        }
        // 格式化单个字节,返回写入的字符数,移动指针
        bufferPtr += sprintf(bufferPtr, "0x%02X", static_cast<unsigned int>(input[i]));
    }
    
    return result;
}

调用与输出

在代码中调用转换函数,并通过__android_log_print输出:

// 示例输入
std::vector<BYTE> input{15, 78, 76, 32, 20};
std::string hexStr = byteVectorToHexString(input);

// 输出到Android日志,LOG_TAG可自定义,日志级别按需选择(INFO/DEBUG等)
__android_log_print(ANDROID_LOG_INFO, "BYTE_CONVERTER", "%s", hexStr.c_str());

关键注意事项

  • BYTE通常是unsigned char的别名,若项目环境未定义,需手动添加typedef unsigned char BYTE;
  • std::setw(2)和%02X确保单个字节的十六进制表示占两位,不足时补零(如15转为0x0F而非0xF)
  • __android_log_print的第一个参数为日志级别,常用值包括ANDROID_LOG_DEBUG、ANDROID_LOG_INFO、ANDROID_LOG_ERROR等;第二个参数为日志标签,用于过滤日志

内容的提问来源于stack exchange,提问作者abalaev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:25:15