news 2026/5/25 14:15:56

2*8的lcd显示屏自动居中

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2*8的lcd显示屏自动居中

一、核心代码(直接可用)

1️⃣ 计算 GBK 显示宽度

int gbkWidth(const std::string &s) { int w = 0; for (size_t i = 0; i < s.size(); ) { unsigned char c = s[i]; if (c & 0x80) { // GBK 中文 w += 2; i += 2; } else { w += 1; i += 1; } } return w; }

2️⃣ 按 8 位拆成两行(GBK 安全)

void splitToTwoLines(const std::string &src, std::string &line1, std::string &line2) { int w = 0; size_t i = 0; // 第一行 for (; i < src.size(); ) { unsigned char c = src[i]; int cw = (c & 0x80) ? 2 : 1; if (w + cw > 8) break; line1.append(src, i, cw == 2 ? 2 : 1); w += cw; i += (cw == 2 ? 2 : 1); } // 第二行(最多 8 位) w = 0; for (; i < src.size(); ) { unsigned char c = src[i]; int cw = (c & 0x80) ? 2 : 1; if (w + cw > 8) break; line2.append(src, i, cw == 2 ? 2 : 1); w += cw; i += (cw == 2 ? 2 : 1); } }

3️⃣ 自动居中主函数(你要的返回 string)

std::string autoCenterGBK_2x8(const std::string &text) { std::string line1, line2; splitToTwoLines(text, line1, line2); int w1 = gbkWidth(line1); int w2 = gbkWidth(line2); // 第一行不满 → 第一行居中 if (w1 < 8) { int left = (8 - w1) / 2; line1 = std::string(left, ' ') + line1; } // 第一行满,第二行不满 → 第二行居中 else if (w2 < 8 && !line2.empty()) { int left = (8 - w2) / 2; line2 = std::string(left, ' ') + line2; } return line1 + "\n" + line2; }

二、效果示例

✅ 示例 1:第一行 3 个中文(6 位)

auto s = autoCenterGBK_2x8("中国人");

显示:

中国人

✅ 示例 2:第一行满 4 个中文,第二行 2 个中文

auto s = autoCenterGBK_2x8("中华人民共和国你好");

显示:

中华人民 共和国你

✅ 示例 3:正好一行 4 个中文

auto s = autoCenterGBK_2x8("测试程序");

显示:

测试程序
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 6:49:57

Linux 内存管理:TLB ASID

文章目录1. 前言2. TLB ASID 的硬件支持2.1 概念2.2 TLB 查找3. Linux 下 TLB ASID 管理4. 参考资料1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. TLB ASID 的硬件支持 2.1 概念 什么是 TLB&…

作者头像 李华
网站建设 2026/5/26 5:48:49

基于微信小程序的数字博物馆系统的设计与实现(程序+文档+讲解)

课题介绍在文博资源数字化、展览体验便捷化需求升级的背景下&#xff0c;传统博物馆存在 “线下参观受限、展品解读单一、互动体验不足” 的痛点&#xff0c;基于微信小程序 SpringBoot 构建的数字博物馆系统&#xff0c;适配游客、博物馆管理员、讲解员等角色&#xff0c;实现…

作者头像 李华
网站建设 2026/5/25 13:17:03

代码随想录算法训练营Day49 | Prim算法、Kruskal算法

Prim算法 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 1.思路 本题是最小生成树的模板题&#xff0c;图中有n个节点&#xff0c;那么一定可以用 n-1 条边将所有节点连接到一起&#xff0c;并且总权重最小。 Prim 算法&#xff1a;从一个顶点开始&#xff0c;逐步“生长”…

作者头像 李华
网站建设 2026/5/25 18:28:05

30、Linux软件包管理与源码构建全攻略

Linux软件包管理与源码构建全攻略 在Linux系统中,软件包的管理和源码构建是非常重要的操作。下面将详细介绍DEB文件处理、源码构建以及SRPM安装的相关内容。 1. RPM验证报告字符含义 在RPM验证报告中,有一些特定的字符代表着不同的含义,如下表所示: | 字符 | 含义 | |…

作者头像 李华
网站建设 2026/5/26 5:49:58

Flink Rebalance、Rescale、Shuffle 核心区别

Flink 中的 Rebalance、Rescale、Shuffle 是三种核心的数据流分区策略,用于定义上游算子的并行子任务如何将数据分发到下游算子的并行子任务。三者的核心差异体现在数据分配方式、网络开销、适用场景上,选择不当会直接影响作业的性能和数据分布的均匀性。以下是详细的对比与解…

作者头像 李华
网站建设 2026/5/26 6:05:09

42、Linux编程:软件开发工具探索与实践

Linux编程:软件开发工具探索与实践 1. 编程基础概念 在编程过程中,通常会经历编辑、编译和调试的循环,多数程序员需多次重复此流程,直至程序正确运行。除了掌握这些基本步骤,还需熟悉以下术语和概念: - 变量 :用于存储不同类型的数据,可将其视为数据的占位符,如同…

作者头像 李华