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

aarch64 GNU/Linux平台JSON字符串读取截断问题排查与修复求助

问题分析

你遇到的问题是aarch64架构下提取的signature字符串长度正确,但cout输出截断,签名验证失败,而x86_64平台正常。核心原因大概率是字符串中混入了不可打印控制字符(比如\0空字符),导致输出被截断,或者旧版Jsoncpp解析器在aarch64下存在兼容性bug。


解决方案

方案1:先排查字符串中的异常字符

添加代码遍历字符串的每个字符,打印其ASCII值和可见形式,确认是否存在不可打印字符:

// 遍历字符串,检查每个字符的ASCII值
std::cout << "Character breakdown:\n";
for (size_t i = 0; i < signature.size(); ++i) {
    unsigned char c = static_cast<unsigned char>(signature[i]);
    std::cout << "[" << i << "] '" << (isprint(c) ? c : '.') << "' (0x" << std::hex << static_cast<int>(c) << ")\n";
}

如果输出中出现0x00(空字符),说明解析过程中引入了截断输出的异常字符,这会直接导致签名验证失败。

方案2:更换Jsoncpp的解析API(推荐)

旧版Json::Reader已被标记为过时,跨平台兼容性差,建议使用官方推荐的Json::CharReaderBuilder(Jsoncpp 1.8.0+支持)。修改后的完整代码:

#include <iostream>
#include <fstream>
#include <json/json.h>
#include <string>
#include <sstream>

int main()
{
    Json::Value root;
    std::string filePath = "/usr/data/signature.json";

    // 读取文件内容到字符串
    std::ifstream file(filePath);
    if (!file.is_open())
    {
        std::cerr << "Error opening file: " << filePath << std::endl;
        return 1;
    }
    std::stringstream buffer;
    buffer << file.rdbuf();

    // 使用CharReaderBuilder解析JSON
    Json::CharReaderBuilder builder;
    builder["collectComments"] = false;
    JSONCPP_STRING errs;
    bool parsing = Json::parseFromStream(builder, buffer, &root, &errs);

    if (!parsing)
    {
        std::cerr << "Parse error: " << errs << std::endl;
        return 1;
    }

    std::string signature = root["signature"].asString();

    std::cout << "size = " << signature.size() << std::endl;
    std::cout << "Signature string: " << signature << std::endl;

    return 0;
}

方案3:检查文件本身的完整性

用hexdump命令对比aarch64和x86_64平台上的JSON文件二进制内容,确保文件未被篡改或传输时引入异常字节:

hexdump -C /usr/data/signature.json

方案4:编译时指定字符编码(针对旧版Jsoncpp)

如果使用的是较旧的Jsoncpp版本,编译时添加宏定义强制使用C locale,避免字符编码处理差异:

g++ your_code.cpp -o your_program -ljsoncpp -DJSONCPP_USE_C_LOCALE=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:46:14