如何优雅地snprintf?

发布于 2024-11-27 03:08:48 字数 332 浏览 2 评论 0原文

如何优雅地使用 snprintf 函数或标准 C 库中的其他函数来通过 unsigned char 数组的 ASCII 表示形式填充内存?

char data[16];
char dataRepresentation[33];
...
for (i = 0; i < 16; ++i)
        snprintf(&dataRepresentation[i * 2], 3, "%02x", (unsigned char) data[i])

这是获取 ASCII 表示的最简单方法吗?

How to gracefully use snprintf function or some another function from standard C library to fill the memory by ASCII representation of an array of unsigned char?

char data[16];
char dataRepresentation[33];
...
for (i = 0; i < 16; ++i)
        snprintf(&dataRepresentation[i * 2], 3, "%02x", (unsigned char) data[i])

Is it the easiest way to get the ASCII representation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云醉月微眠 2024-12-04 03:08:48

稍微调整一下会更快:

char data[16];
char dataRepresentation[2 * sizeof data];
static const char master[] = "01234567890abcdef";
...
for (i = 0; i < sizeof data; ++i)
{
     dataRepresentation[i * 2] = master[0xF&(data[i]>>4)];
     dataRepresentation[i * 2 + 1] = master[data[i]&0xF];
}

请注意,我实际上还没有编译此代码。

A bit of bit-twiddling will go much faster:

char data[16];
char dataRepresentation[2 * sizeof data];
static const char master[] = "01234567890abcdef";
...
for (i = 0; i < sizeof data; ++i)
{
     dataRepresentation[i * 2] = master[0xF&(data[i]>>4)];
     dataRepresentation[i * 2 + 1] = master[data[i]&0xF];
}

Beware that I haven't actually compiled this code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文