📋 目录


1. 📖 背景介绍

1.1 🧮 pcalc工具简介

programmer-calculator (pcalc) 是一个专为程序员设计的终端计算器工具,提供了强大的二进制、十六进制和十进制数值表示,以及丰富的位运算功能。它最初是为了开发Nintendo Gameboy模拟器而诞生的,旨在解决在线工具笨重且不支持多任务的问题。
在这里插入图片描述

核心功能

  • 🔢 多进制显示: 同时显示二进制、十六进制和十进制表示
  • 🔧 位运算操作: 支持AND、OR、XOR、NOT、移位、旋转等位运算
  • 📊 多种操作数大小: 支持8位、16位、32位、64位等不同位宽
  • 🎨 可定制界面: 可切换显示历史、各种进制、操作显示等
  • 🌈 彩色输出: 支持彩色终端显示(可选)
  • 📝 内联数学: 支持运算符优先级和括号分组
  • 高效便捷: 简洁清晰的界面,专为程序员优化

应用场景

  • 🔧 嵌入式开发(寄存器操作、位标志处理)
  • 🎮 游戏开发(颜色值、坐标计算)
  • 🔐 加密算法开发(位操作、掩码处理)
  • 📡 网络编程(IP地址、端口计算)
  • 🖥️ 系统编程(内存地址、位字段操作)
  • 🎯 调试和逆向工程

1.2 🎯 适配目标

将programmer-calculator命令行工具适配到鸿蒙PC(OpenHarmony PC)平台,实现:

  • 🔧 C项目交叉编译支持
  • 🏗️ 支持aarch64-linux-ohos架构
  • 🔧 使用OHOS SDK工具链进行编译
  • 📦 生成HNP格式的安装包
  • 📦 生成tar.gz格式的发布包
  • 💻 提供可执行的 pcalc命令
  • ✅ 所有功能在鸿蒙PC上正常运行

1.3 🔧 技术栈

  • 语言: 🔧 C (C11标准)
  • 构建系统: Makefile
  • 目标平台: 🎯 aarch64-linux-ohos
  • 打包格式: 📦 HNP (HarmonyOS Native Package)
  • 编译工具链: OHOS SDK Native LLVM (clang/ld.lld)
  • 主要依赖:
    • ncursesw - 宽字符ncurses库(用于终端UI)
    • tinfow - terminfo宽字符库(可选)

1.4 💡 工具优势

相比传统的计算器工具,pcalc提供了:

  • 专为程序员设计: 界面和功能完全针对程序员需求优化
  • 多进制同步显示: 无需手动转换,同时查看不同进制表示
  • 丰富的位运算: 支持所有常用位运算操作
  • 灵活的操作数大小: 可根据需要切换位宽
  • 零学习成本: 直观的界面,操作简单
  • 开源免费: MIT/Apache-2.0双许可证

2. 🛠️ 环境准备

2.1 💻 系统要求

  • 开发环境: 💻 macOS / 🐧 Linux / 🪟 Windows (WSL)
  • Python: 🐍 Python 3.x(用于构建脚本)
  • C编译器: 🔧 clang/gcc
  • 鸿蒙SDK: 📦 OHOS SDK (包含native工具链和hnpcli打包工具)
  • 依赖库: 📚 ncurses(需要在HNP包中可用)

2.2 📥 SDK安装

  1. 📥 下载SDK
# 下载鸿蒙SDK
cd ~
wget https://cidownload.openharmony.cn/version/Master_Version/ohos-sdk-full_ohos/20250819_020817/version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz

# 解压SDK
tar -zvxf version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz
  1. 📁 SDK目录结构
ohos-sdk/
├── native/
│   ├── llvm/bin/          # 🔧 编译器工具链
│   ├── sysroot/           # 📚 系统根目录(头文件和库)
│   └── build-tools/       # 🛠️ 构建工具
└── toolchains/
    └── hnpcli            # 📦 HNP打包工具

2.3 📚 依赖库准备

pcalc需要ncurses库,确保ncurses HNP包已构建:

# 检查ncurses HNP包是否存在
ls -la /path/to/output/hnp/ncurses.org/ncurses_v6.4/

# 应该包含:
# - include/ncursesw/  (头文件目录)
# - lib/               (库文件目录)

3. 📁 项目结构分析

3.1 📂 目录结构

programmer-calculator/
├── src/                    # 源代码目录
│   ├── main.c             # 主程序入口 ⭐
│   ├── draw.c             # 界面绘制(使用ncurses)
│   ├── history.c          # 历史记录管理
│   ├── numberstack.c      # 数值栈管理
│   ├── operators.c        # 运算符处理
│   ├── parser.c           # 表达式解析
│   └── xmalloc.c          # 内存分配封装
├── include/                # 头文件目录
│   ├── draw.h
│   ├── global.h
│   ├── history.h
│   ├── numberstack.h
│   ├── operators.h
│   ├── parser.h
│   └── xmalloc.h
├── tests/                  # 测试用例
├── assets/                 # 资源文件(截图等)
├── Makefile               # 构建配置
├── build_ohos.sh          # OpenHarmony构建脚本 ⭐
├── hnp.json               # HNP包配置 ⭐
├── CHANGELOG              # 变更日志 ⭐
├── README.OPENSOURCE      # 开源说明文档 ⭐
├── README.md              # 项目说明
├── LICENSE                # GPL v3许可证
└── CONTRIBUTING.md        # 贡献指南

3.2 📝 关键文件说明

Makefile
CC = gcc
CFLAGS := -std=c11 -Wall -Wextra -g -Werror=missing-declarations -Werror=redundant-decls -D_DEFAULT_SOURCE -pedantic-errors
LFLAGS = -lncurses

关键配置

  • ✅ 使用C11标准
  • ✅ 链接ncurses库
  • ✅ 严格的编译警告
src/main.c

主程序入口,包含:

  • 命令行参数解析
  • ncurses初始化
  • 主循环逻辑
  • 信号处理
src/draw.c

界面绘制模块,使用ncurses进行:

  • 终端窗口管理
  • 文本输出和格式化
  • 颜色和样式控制

4. 🔍 问题诊断与解决

4.1 ⚠️ 主要挑战

  1. ncurses依赖: pcalc依赖ncurses库,需要找到正确的头文件和库路径
  2. HNP包路径: ncurses可能在HNP包中,需要动态查找
  3. 宽字符支持: 需要使用ncursesw(宽字符版本)

4.2 🔧 解决方案

  1. 动态查找ncurses: 在构建脚本中搜索多个可能的路径
  2. 使用ncursesw: 优先使用宽字符版本,兼容性更好
  3. 正确的include路径: 确保包含ncursesw子目录

5. ✏️ 详细修改步骤

5.1 📝 步骤1:创建构建脚本

文件: build_ohos.sh

创建OpenHarmony构建脚本:

#!/bin/bash
# programmer-calculator OpenHarmony build script
# programmer-calculator is a terminal calculator for programmers

set -e
export PCALC_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/programmer-calculator.org/programmer-calculator_3.1

# ... (环境检查、目录创建等)

# 查找ncurses头文件路径(可能在HNP包中)
NCURSES_INCLUDE=""
NCURSES_LIB=""

# 尝试多个可能的HNP路径
HNP_PATHS=(
    "${HNP_PUBLIC_PATH}/ncurses.org/ncurses_v6.4"
    "${PWD}/../output/hnp/ncurses.org/ncurses_v6.4"
    "${PWD}/../../output/hnp/ncurses.org/ncurses_v6.4"
)

for HNP_BASE in "${HNP_PATHS[@]}"; do
    if [ -d "${HNP_BASE}/include/ncursesw" ]; then
        # 需要包含父目录,因为ncurses.h会包含ncursesw/ncurses_dll.h
        NCURSES_INCLUDE="${HNP_BASE}/include"
        NCURSES_LIB="${HNP_BASE}/lib"
        echo "Found ncurses in HNP package: ${NCURSES_INCLUDE}"
        break
    fi
done

# 设置编译标志
if [ -d "${NCURSES_INCLUDE}/ncursesw" ]; then
    export CFLAGS="${CFLAGS} -I${NCURSES_INCLUDE}/ncursesw -I${NCURSES_INCLUDE} -I${SYSROOT}/usr/include -I${SYSROOT}/include"
else
    export CFLAGS="${CFLAGS} -I${NCURSES_INCLUDE} -I${SYSROOT}/usr/include -I${SYSROOT}/include"
fi

# 检查库文件,优先使用tinfow,如果没有则使用tinfo
if [ -f "${NCURSES_LIB}/libtinfow.so" ] || [ -f "${NCURSES_LIB}/libtinfow.a" ]; then
    export LDFLAGS="${LDFLAGS} -L${NCURSES_LIB} -L${SYSROOT}/usr/lib -L${SYSROOT}/lib -lncursesw -ltinfow"
elif [ -f "${NCURSES_LIB}/libtinfo.so" ] || [ -f "${NCURSES_LIB}/libtinfo.a" ]; then
    export LDFLAGS="${LDFLAGS} -L${NCURSES_LIB} -L${SYSROOT}/usr/lib -L${SYSROOT}/lib -lncursesw -ltinfo"
else
    # 如果都没有,只链接ncursesw(可能包含tinfo)
    export LDFLAGS="${LDFLAGS} -L${NCURSES_LIB} -L${SYSROOT}/usr/lib -L${SYSROOT}/lib -lncursesw"
fi

# 编译源文件
for src in $SOURCES; do
    obj="build/$(basename ${src%.c}.o)"
    ${CC} ${CFLAGS} -Iinclude -c "$src" -o "$obj"
    OBJECTS="$OBJECTS $obj"
done

# 链接生成可执行文件
${CC} ${CFLAGS} ${OBJECTS} ${LDFLAGS} -o bin/pcalc

关键步骤

  1. ✅ 动态查找ncurses HNP包路径
  2. ✅ 设置正确的include路径(包含ncursesw子目录)
  3. ✅ 检查并链接正确的库文件
  4. ✅ 编译所有源文件
  5. ✅ 链接生成可执行文件

5.2 📝 步骤2:创建HNP配置文件

文件: hnp.json

{
    "type": "hnp-config",
    "name": "programmer-calculator",
    "version": "3.1",
    "install": {}
}

版本说明

  • 原版本:v3.0(main.c中定义)
  • 新版本:3.1(鸿蒙适配版本)

5.3 📝 步骤3:创建文档文件

文件: CHANGELOGREADME.OPENSOURCE

创建空白文档文件,后续补全内容。


6. ✅ 构建验证

6.1 🚀 执行构建

# 1. 进入构建目录
cd /Users/lijiajun/ohos-sdk/HarmonyOSPC/build

# 2. 执行构建脚本
./build.sh --sdk /Users/lijiajun/ohos-sdk

# 3. 构建输出位于 output/ 目录
ls output/
# programmer-calculator.hnp
# ohos_programmer-calculator_3.1.tar.gz

6.2 📊 构建结果

构建成功输出

Found ncurses in HNP package: /Users/lijiajun/ohos-sdk/HarmonyOSPC/build/code/pcalc/../../output/hnp/ncurses.org/ncurses_v6.4/include
Using ncurses include: /Users/lijiajun/ohos-sdk/HarmonyOSPC/build/code/pcalc/../../output/hnp/ncurses.org/ncurses_v6.4/include
Using ncurses lib: /Users/lijiajun/ohos-sdk/HarmonyOSPC/build/code/pcalc/../../output/hnp/ncurses.org/ncurses_v6.4/lib
Building programmer-calculator...
  Compiling src/draw.c -> build/draw.o
  Compiling src/history.c -> build/history.o
  Compiling src/main.c -> build/main.o
  Compiling src/numberstack.c -> build/numberstack.o
  Compiling src/operators.c -> build/operators.o
  Compiling src/parser.c -> build/parser.o
  Compiling src/xmalloc.c -> build/xmalloc.o
Linking pcalc...
pcalc installed successfully
Binary file type:
ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1
Build completed successfully!

构建产物

  • programmer-calculator.hnp (33KB) - HNP包文件
  • ohos_programmer-calculator_3.1.tar.gz (33KB) - tar.gz压缩包

6.3 ✅ 验证要点

  1. 二进制文件格式: ELF 64-bit LSB pie executable, ARM aarch64 ✅
  2. 链接方式: dynamically linked(需要ncurses运行时库)✅
  3. 文件大小: 约33KB(优化后的release版本)✅
  4. 运行时依赖: 需要ncurses库在目标系统可用 ✅

7. 💻 使用示例

7.1 📋 基本使用

🚀 启动计算器
# 在OpenHarmony PC终端执行
pcalc

界面显示

┌─────────────────────────────────────────┐
│  Decimal: 0                             │
│  Hex:     0x0                           │
│  Binary:  0b0                           │
│                                          │
│  Operation:                             │
│                                          │
│  History:                               │
│                                          │
│  Input:                                  │
└─────────────────────────────────────────┘
📌 查看帮助信息
# 在OpenHarmony PC终端执行
pcalc --help
# 或
pcalc -h

输出示例

Programmer calculator v3.0

Usage: pcalc [OPTIONS]

Options:
  -h, --help          Show this help message
  -v, --version       Show version information
  -i, --history       Hide history panel
  -b, --binary        Hide binary representation
  -x, --hex           Hide hexadecimal representation
  -d, --decimal       Hide decimal representation
  -o, --operation     Hide operation display
  -s, --symbols       Hide symbols panel
  -n, --no-colors     Disable colors
  --colors            Enable colors
📌 查看版本信息
# 在OpenHarmony PC终端执行
pcalc --version
# 或
pcalc -v

输出示例

Programmer calculator v3.0

7.2 🔢 基本计算

➕ 加法运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 10 + 20
# 或输入: 10+20
# 或输入: 10 +20
# 或输入: 10+ 20

显示结果

Decimal: 30
Hex:     0x1E
Binary:  0b11110
➖ 减法运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 100 - 50

显示结果

Decimal: 50
Hex:     0x32
Binary:  0b110010
✖️ 乘法运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 5 * 6

显示结果

Decimal: 30
Hex:     0x1E
Binary:  0b11110
➗ 除法运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 100 / 3

显示结果

Decimal: 33
Hex:     0x21
Binary:  0b100001

7.3 🔢 多进制输入

🔟 十进制输入
# 在OpenHarmony PC终端执行
pcalc
# 输入: 255

显示结果

Decimal: 255
Hex:     0xFF
Binary:  0b11111111
🔟 十六进制输入
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0xFF
# 或输入: 0xff

显示结果

Decimal: 255
Hex:     0xFF
Binary:  0b11111111
🔟 二进制输入
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0b11111111

显示结果

Decimal: 255
Hex:     0xFF
Binary:  0b11111111
🔢 混合进制计算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0xFF + 0b101101 - 5

显示结果

Decimal: 250
Hex:     0xFA
Binary:  0b11111010

7.4 🔧 位运算操作

🔀 AND运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0xFF & 0x0F

显示结果

Decimal: 15
Hex:     0xF
Binary:  0b1111
Operation: 0xFF & 0x0F
🔀 OR运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0x0F | 0xF0

显示结果

Decimal: 255
Hex:     0xFF
Binary:  0b11111111
Operation: 0x0F | 0xF0
🔀 XOR运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0xFF ^ 0x0F

显示结果

Decimal: 240
Hex:     0xF0
Binary:  0b11110000
Operation: 0xFF ^ 0x0F
🔀 NOT运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: ~0xFF

显示结果

Decimal: -256
Hex:     0xFFFFFF00
Binary:  0b11111111111111111111111100000000
Operation: ~0xFF
🔀 左移运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 1 < 8
# 说明: 将1左移8位

显示结果

Decimal: 256
Hex:     0x100
Binary:  0b100000000
Operation: 1 < 8
🔀 右移运算
# 在OpenHarmony PC终端执行
pcalc
# 输入: 256 > 8
# 说明: 将256右移8位

显示结果

Decimal: 1
Hex:     0x1
Binary:  0b1
Operation: 256 > 8
🔀 循环左移
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0xFF : 4
# 说明: 将0xFF循环左移4位

显示结果

Decimal: 4080
Hex:     0xFF0
Binary:  0b111111110000
Operation: 0xFF : 4
🔀 循环右移
# 在OpenHarmony PC终端执行
pcalc
# 输入: 0xFF ; 4
# 说明: 将0xFF循环右移4位

显示结果

Decimal: 15
Hex:     0xF
Binary:  0b1111
Operation: 0xFF ; 4
🔀 2的补码
# 在OpenHarmony PC终端执行
pcalc
# 输入: _10
# 说明: 计算10的2的补码

显示结果

Decimal: -10
Hex:     0xFFFFFFF6
Binary:  0b11111111111111111111111111110110
Operation: _10
🔀 字节序交换
# 在OpenHarmony PC终端执行
pcalc
# 输入: @0x12345678
# 说明: 交换字节序

显示结果

Decimal: 305419896
Hex:     0x78563412
Binary:  0b1111000010101100011010000010010
Operation: @0x12345678

7.5 📊 操作数大小控制

🔢 8位模式
# 在OpenHarmony PC终端执行
pcalc
# 输入: 8bit
# 然后输入: 255 + 1

显示结果

Decimal: 0  (8-bit unsigned)
Hex:     0x0
Binary:  0b0
Operation: 255 + 1
🔢 16位模式
# 在OpenHarmony PC终端执行
pcalc
# 输入: 16bit
# 然后输入: 65535 + 1

显示结果

Decimal: 0  (16-bit unsigned)
Hex:     0x0
Binary:  0b0
Operation: 65535 + 1
🔢 32位模式
# 在OpenHarmony PC终端执行
pcalc
# 输入: 32bit
# 然后输入: 4294967295 + 1

显示结果

Decimal: 0  (32-bit unsigned)
Hex:     0x0
Binary:  0b0
Operation: 4294967295 + 1
🔢 自定义位宽
# 在OpenHarmony PC终端执行
pcalc
# 输入: 12bit
# 然后输入: 4095 + 1

显示结果

Decimal: 0  (12-bit unsigned)
Hex:     0x0
Binary:  0b0
Operation: 4095 + 1

7.6 🎨 界面定制

📋 切换显示选项

在pcalc运行时,可以输入以下命令切换显示:

# 在pcalc运行时输入
history      # 切换历史记录显示
decimal      # 切换十进制显示
binary       # 切换二进制显示
hex          # 切换十六进制显示
operation    # 切换操作显示
🎨 启用/禁用颜色
# 启动时启用颜色
pcalc --colors

# 启动时禁用颜色
pcalc --no-colors
# 或
pcalc -n
🎯 自定义默认界面
# 创建别名,隐藏不需要的界面元素
alias pcalc='pcalc -ibxdosn'
# i: history, b: binary, x: hex, d: decimal, o: operation, s: symbols, n: no colors

7.7 📝 内联数学表达式

🔢 运算符优先级
# 在OpenHarmony PC终端执行
pcalc
# 输入: 2 + 2 * 3

显示结果

Decimal: 8
Hex:     0x8
Binary:  0b1000
Operation: 2 + 2 * 3
🔢 括号分组
# 在OpenHarmony PC终端执行
pcalc
# 输入: (2 + 2) * 3

显示结果

Decimal: 12
Hex:     0xC
Binary:  0b1100
Operation: (2 + 2) * 3
🔢 复杂表达式
# 在OpenHarmony PC终端执行
pcalc
# 输入: (0xFF & 0x0F) | (0x10 << 4)

显示结果

Decimal: 255
Hex:     0xFF
Binary:  0b11111111
Operation: (0xFF & 0x0F) | (0x10 << 4)

7.8 🎯 实际应用场景

🔧 寄存器操作
# 在OpenHarmony PC终端执行
pcalc
# 设置寄存器值
# 输入: 0x1234
# 设置位标志
# 输入: 0x1234 | 0x0001
# 清除位标志
# 输入: 0x1234 & ~0x0001
🎨 颜色值计算
# 在OpenHarmony PC终端执行
pcalc
# RGB颜色值计算
# 输入: (255 << 16) | (128 << 8) | 64
# 结果: 0xFF8040 (RGB: 255, 128, 64)
📡 IP地址计算
# 在OpenHarmony PC终端执行
pcalc
# IP地址转整数
# 输入: (192 << 24) | (168 << 16) | (1 << 8) | 1
# 结果: 0xC0A80101 (192.168.1.1)
🔐 位掩码操作
# 在OpenHarmony PC终端执行
pcalc
# 检查位标志
# 输入: 0xFF & 0x01
# 结果: 0x1 (第0位被设置)
# 设置位标志
# 输入: 0x00 | 0x01
# 结果: 0x1
# 清除位标志
# 输入: 0xFF & ~0x01
# 结果: 0xFE

7.9 ⚠️ 常见问题排查

🔴 问题1: 找不到ncurses库

症状

$ pcalc
pcalc: error while loading shared libraries: libncursesw.so.6: cannot open shared object file

原因

  • ncurses库未安装或不在库搜索路径中

解决方案

  1. 确保ncurses HNP包已安装:

    hnp install ncurses.hnp
    
  2. 检查库文件是否存在:

    ls /data/service/hnp/ncurses.org/ncurses_v6.4/lib/
    
  3. 设置LD_LIBRARY_PATH(如果需要):

    export LD_LIBRARY_PATH=/data/service/hnp/ncurses.org/ncurses_v6.4/lib:$LD_LIBRARY_PATH
    
🟡 问题2: 终端不支持颜色

症状

  • 颜色显示异常或无法显示

解决方案

  • 使用 --no-colors 选项禁用颜色:
    pcalc --no-colors
    
🟢 问题3: 界面显示异常

症状

  • 界面布局错乱
  • 字符显示不正确

原因

  • 终端不支持ncurses或termcap数据库不完整

解决方案

  1. 检查终端类型:

    echo $TERM
    
  2. 设置正确的终端类型:

    export TERM=xterm-256color
    

8. 📚 总结与最佳实践

8.1 ✅ 适配要点总结

  1. 📝 C项目适配

    • ✅ 使用OHOS SDK的clang编译器
    • ✅ 正确配置ncurses头文件和库路径
    • ✅ 动态查找HNP包中的依赖库
    • ✅ 处理宽字符ncurses(ncursesw)
  2. 🔧 构建脚本适配

    • ✅ 检查C编译器
    • ✅ 动态查找ncurses HNP包
    • ✅ 设置正确的include和library路径
    • ✅ 编译所有源文件
    • ✅ 链接生成可执行文件
    • ✅ 复制文档和许可证文件
    • ✅ 打包HNP和tar.gz
  3. 📦 打包配置

    • ✅ 配置HNP包信息
    • ✅ 生成HNP和tar.gz包
    • ✅ 验证安装目录结构

8.2 💡 最佳实践

  1. 📦 项目结构

    • ✅ 保持代码结构清晰
    • ✅ 使用模块化设计
    • ✅ 提供清晰的命令行接口
  2. 🔧 构建流程

    • ✅ 使用 set -e确保错误时退出
    • ✅ 验证关键文件存在
    • ✅ 提供清晰的构建日志
    • ✅ 动态查找依赖库路径
  3. 📝 代码质量

    • ✅ 处理所有错误情况
    • ✅ 提供友好的错误消息
    • ✅ 使用ncurses提供美观的界面
  4. 📚 文档完善

    • ✅ 提供使用示例
    • ✅ 说明命令参数
    • ✅ 记录已知问题
    • ✅ 提供故障排除指南

8.3 🎯 pcalc的优势

相比其他计算器工具,pcalc提供了:

  • 专为程序员设计: 界面和功能完全针对程序员需求
  • 多进制同步显示: 无需手动转换
  • 丰富的位运算: 支持所有常用位运算
  • 灵活的操作数大小: 可根据需要切换位宽
  • 美观的界面: 使用ncurses提供清晰的终端UI
  • 零学习成本: 直观的操作方式

📎 附录

A. 📁 完整文件清单

📝 创建的文件:

  • 🔧 build_ohos.sh - OpenHarmony构建脚本
  • 📋 hnp.json - HNP包配置
  • 📝 CHANGELOG - 变更日志
  • 📚 README.OPENSOURCE - 开源说明文档

📦 生成的文件:

  • 📦 output/programmer-calculator.hnp - HNP格式安装包 (33KB)
  • 📦 output/ohos_programmer-calculator_3.1.tar.gz - tar.gz格式发布包 (33KB)

B. 💻 参考命令

# 构建命令
cd /Users/lijiajun/ohos-sdk/HarmonyOSPC/build
./build.sh --sdk /Users/lijiajun/ohos-sdk

# 查看构建输出
ls -lh output/ | grep programmer-calculator

# 验证安装目录
tree ${HNP_PUBLIC_PATH}/programmer-calculator.org/programmer-calculator_3.1/

# 验证二进制文件格式(在macOS上)
file ${HNP_PUBLIC_PATH}/programmer-calculator.org/programmer-calculator_3.1/bin/pcalc
# 应该显示: ELF 64-bit LSB pie executable, ARM aarch64, dynamically linked

# 测试命令(在OpenHarmony PC上)
export PATH=${HNP_PUBLIC_PATH}/programmer-calculator.org/programmer-calculator_3.1/bin:$PATH
pcalc --version
pcalc --help

# 基本使用
pcalc
# 输入: 0xFF + 0b101101 - 5
# 输入: 8bit
# 输入: 255 + 1

C. 📌 版本信息

  • 📁 pcalc版本: v3.0 (原始版本)
  • 📦 适配版本: 3.1 (鸿蒙适配版本)
  • 📅 适配日期: 2024-12-11
  • 🎯 目标平台: aarch64-linux-ohos
  • 🔧 构建系统: Makefile
  • 📦 依赖: ncursesw (运行时依赖)
  • 🔗 源仓库地址: https://github.com/alt-romes/programmer-calculator

D. 📚 相关资源

  • 🌐 pcalc文档: https://github.com/alt-romes/programmer-calculator
  • 💻 GitHub仓库: https://github.com/alt-romes/programmer-calculator
  • 📖 ncurses文档: https://invisible-island.net/ncurses/
  • 🎯 位运算教程: https://en.wikipedia.org/wiki/Bitwise_operation

E. 💡 技术说明

ncurses库说明

pcalc使用ncurses库进行终端界面绘制:

  • ncursesw: 宽字符版本,支持Unicode字符
  • tinfow: terminfo宽字符库,提供终端能力数据库
  • 动态链接: pcalc动态链接ncurses,需要运行时库支持

位运算说明

pcalc支持丰富的位运算操作:

  • AND (&): 按位与
  • OR (|): 按位或
  • XOR (^): 按位异或
  • NOT (~): 按位取反
  • SHIFT-LEFT (<): 左移
  • SHIFT-RIGHT (>): 右移
  • ROTATE-LEFT (😃: 循环左移
  • ROTATE-RIGHT (😉: 循环右移

🎉 结语

本文档详细介绍了programmer-calculator命令行工具在OpenHarmony PC平台上的适配过程。pcalc是一个专为程序员设计的强大计算器工具,通过C语言的交叉编译能力,成功实现了在鸿蒙PC平台上的部署。

pcalc工具为程序员提供了强大的数值计算和位运算能力,是嵌入式开发、游戏开发、系统编程等领域的重要工具。希望本文档能够帮助开发者:

  • 🧮 理解程序员计算器的使用方式
  • 🔧 掌握C项目适配OpenHarmony的方法
  • 📦 了解HNP包的构建和打包流程
  • 💻 学习终端UI开发实践
  • 🎯 掌握位运算和进制转换的应用

💬 如有问题或建议,欢迎反馈!


Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐