c - uint64_t 到数组 - C 语言
问题描述
我试图将 uint64_t 数组解析为 char 数组(结果为十进制,用逗号分隔)。
我使用 memcpy,每次我得到一个随机值。iota() 函数转换最大 uint32_t 值。我尝试将 uint64_t 与 2 uint32_t 分开,但我从来没有得到正确的结果。
uint64_t numbers[10] = { 201234567890123456,
12345678901234567890,
98765432109876543,
65432109887,
12345234512345,
217631276371261627,
12354123512453124,
2163521442531,
2341232142132321,
1233432112 };
char array[1000] = "";
预期结果:
array = "201234567890123456,12345678901234567890,98765432109876543,65432109887,12345234512345,217631276371261627,12354123512453124,2163521442531,2341232142132321,1233432112"
我从这个主题尝试了 int64ToChar ,但结果是:
void uint64ToChar(char a[], int64_t n) {
memcpy(a, &n, 10);
}
uint64_t number = 12345678900987654;
char output[30] = "";
uint64ToChar(output, number);
Result:
�g]T�+
谢谢你的帮助。
解决方案
Uesnpintf()
转换 64 位数字:
#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>
int main() {
uint64_t numbers[10] = { 201234567890123456,
12345678901234567890,
98765432109876543,
65432109887,
12345234512345,
21763127637126371627,
12354123512453124,
2163521442531,
2341232142132321,
1233432112 };
char array[1000];
size_t i, n = sizeof(numbers) / sizeof(numbers[0]), pos = 0;
for (i = 0; i < n && pos < sizeof(array); i++) {
pos += snprintf(array + pos, sizeof(array) - pos, "%"PRIu64"%s", numbers[i],
i < n - 1 ? "," : "");
}
printf("%s\n", array);
return 0;
}
推荐阅读
- android - 为什么删除 gradle 中的 rootProject.buildDir 任务删除了模块中的构建目录
- json - 将数据从 JSON 文件加载到 html/ 控制台
- java - java中的封闭变量是什么?
- bash - Bash 脚本接受有效数字格式的变量
- angular - 带有防护的Angular 5单元测试路线
- python - 使用 kivy 复选框进行事件处理
- eclipse - 如何在 Eclipse 中完全禁用 SVN?
- angular - 离子onclick滚动到页面底部不起作用
- shopify - 任何人都可以详细说明 Shopify 默认的 _st js 对象吗?
- spring - 无法使用带有 Spring Security 的 LDAP 用户搜索查询来验证具有 LDAP 服务器的用户