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

如何在C/C++11中生成16字节十六进制数组?求示例代码

生成16字节十六进制数组(C/C++11实现)

没问题!在C或者C++11里生成你需要的这种16字节十六进制数组,有几种实用的实现方式,我给你详细说明:

1. 手动直接初始化(最直观)

这是最直接的写法,C和C++11都完全支持,就是你给出的示例本身——直接按顺序写出每个十六进制常量:

#include <cstdint> // C++环境下引入uint8_t的头文件
// C语言环境请改用<stdint.h>

const uint8_t alice[16] = { 
    0x0, 0x1, 0x2, 0x3, 
    0x4, 0x5, 0x6, 0x7, 
    0x8, 0x9, 0xa, 0xb, 
    0xc, 0xd, 0xe, 0xf 
};

这种写法一目了然,编译阶段就完成初始化,完全没有运行时开销。

2. 自动生成(适合规律化的序列)

如果你的数组是有规律的(比如从0x0到0xf的连续值),不想手动逐个输入,可以用自动生成的方式:

2.1 C语言(运行时赋值)

在C里可以用循环给数组赋值,适合需要动态生成的场景:

#include <stdint.h>
#include <stdio.h>

int main() {
    uint8_t alice[16];
    for (int i = 0; i < 16; ++i) {
        alice[i] = (uint8_t)i; // 循环变量直接转换为uint8_t,对应0x0到0xf
    }

    // 验证输出
    for (int i = 0; i < 16; ++i) {
        printf("0x%x ", alice[i]);
    }
    return 0;
}

2.2 C++11(编译期生成,无运行时开销)

C++11支持constexpr,可以在编译阶段就完成数组初始化,和手动写的效果完全一致:

#include <cstdint>
#include <array>
#include <utility>

constexpr uint8_t generate_val(int index) {
    return static_cast<uint8_t>(index);
}

// 模板元编程实现编译期数组生成
template <size_t... Indices>
constexpr auto make_array_impl(std::index_sequence<Indices...>) {
    return std::array<uint8_t, 16>{generate_val(Indices)...};
}

// 生成编译期数组
constexpr auto alice_array = make_array_impl(std::make_index_sequence<16>());
// 如需兼容C风格数组,可通过data()获取指针
const uint8_t* alice = alice_array.data();

这种方式的优势是数组在编译时就已初始化完成,运行时不需要额外操作,效率拉满。

总结

  • 如果是固定不变的数组,手动初始化是最优选择,清晰又高效;
  • 如果是有规律的序列或需要动态生成,根据所用语言选择对应的自动生成方式即可。

内容的提问来源于stack exchange,提问作者Kumar Roshan Mehta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:46