ImGui 渲染错误的字符(从 tcp 套接字接收的字符)

问题描述 投票:0回答:1

希望大家都好。 我有一个 imgui 框架作为客户端与 tcp 套接字连接; 服务器是在 golang 中完成的,我使用此通信来执行登录,一切正常。但是当我需要绘制获得帐户时收到的文本时,我遇到了问题; 这是我发送以 base64 编码的内容的方式

// < Connection to socket using net >
conn := (net.Conn)
conn.Write([]byte(b64.StdEncoding.EncodeToString([]byte(account))))

为了在 CPP 中接收,我使用此功能

char recv[300];
recv(_conn, (char*)recv, 300, 0);
const char* result = base64_decode(recv).c_str();

并在屏幕上绘制文本:

void RenderTextColor(ImFont* font, const ImVec2& p_min, const ImVec2& p_max, ImU32 col, const char* text, const ImVec2& align)
{
    PushFont(font);
    PushStyleColor(ImGuiCol_Text, col);
    RenderTextClipped(p_min, p_max, text, NULL, NULL, align, NULL);
    PopStyleColor();
    PopFont();
}

问题是:我可以在控制台中成功打印收到的文本;甚至显示一个消息框,所有内容都已成功接收并打印/显示,但是当我需要使用 imgui 绘制文本时,结果如下:

只有随机字符和“?”,看起来像是编码错误或其他问题,但我找不到发生了什么。

提前致谢

编辑:这是完整的 cpp 代码:


/* struct */
struct card_data
{
    const char* content;
    const char* label1;
    const char* label2;

    bool operator==(const card_data& other) const {
        return std::wcscmp(label1, other.label1) == 0;
    }
};

std::vector<card_data> texts = { };

/* Receive part */
sprintf(message, "COMMAND|%s\n", request.args.c_str());
send(_conn, (const char*)message, strlen(message), 0)
char drecv[300];
recv(_conn, (char*)drecv, 300, 0)
size_t length = strlen(drecv);
while (length > 0 && isspace(drecv[length - 1])) {
    drecv[--length] = '\0';
}
const char* result = base64_decode(drecv);
std::stringstream ss(result);
std::string token;
texts.clear();
while (std::getline(ss, token, '/')) {
    std::vector<string> dist = splitString(token, '_');

    const char* label1 = dist[0].c_str();
    const char* label2 = dist[1].c_str();
    const char* content = dist[1].c_str();

    std::cout << label1 << std::endl; // Print successfully 
    std::cout << label2 << std::endl; // Print successfully 
    std::cout << content << std::endl; // Print successfully 

    texts.push_back({ content, label1, label2 }); // Here it push unknown characters

    /*
    
    const char* testLabel = "TEST LABEL";
    const char* testLabel2 = "TEST LABEL2";
    const char* testContent = "TEST CONTENT";

    texts.push_back({testContent, testLabel, testLabel2 }); // Here everything works

    */
}

/* Draw part */
<in main loop>
for (const auto& text : texts)
{
    ImGui::LabelledCard(text.content, text.label1, text.label2);
}

然后 LabelledCard 使用

RenderTextColor

c++ go sockets tcp imgui
1个回答
0
投票

这实际上是我的 struct card_data 使用 char* 而不是 char[] 的问题

© www.soinside.com 2019 - 2024. All rights reserved.