如何生成含256个16字节元素的递增十六进制数组?
生成256个16字节十六进制字符串数组的解决方案
以下是满足需求的完整代码:
#include <stdio.h> #include <string.h> int main() { // 每个元素需存储32个十六进制字符 + 1个字符串终止符'\0' char arr[256][33]; for(int i = 0; i < 256; i++) { // 格式化生成十六进制字符串:前15字节对应30个"00",最后1字节为i的两位十六进制 snprintf(arr[i], sizeof(arr[i]), "000000000000000000000000000000%02X", i); // 打印验证每个字符串 printf("%s\n", arr[i]); } return 0; }
原代码的问题分析
- 你最初的代码将
unsigned char数组当作字符串使用,但数组中存储的是0x00字节(而非字符'0'),printf("%s")会把第一个0x00视为字符串结束符,因此仅输出换行。 - 原框架中的
unsigned char arr[256][16]空间不足:16字节的十六进制表示需要32个字符,加上字符串终止符'\0',每个元素至少需要33个存储位置。
关键代码说明
char arr[256][33]:正确分配存储空间,确保每个元素能容纳完整的十六进制字符串及终止符。snprintf函数安全地格式化字符串,避免缓冲区溢出:- 前30个字符固定为"00"重复15次,对应前15个字节的
0x00。 %02X将整数i转换为两位大写十六进制字符串,不足两位时自动补0,对应第16个字节的数值。若需要小写十六进制,改用%02x即可。
- 前30个字符固定为"00"重复15次,对应前15个字节的
内容的提问来源于stack exchange,提问作者freyfrey01
相关产品推荐
相关产品推荐

