gpt4 book ai didi

c - 为 __uint128 数字预处理 C 十六进制字符串

转载 作者:太空狗 更新时间:2023-10-29 11:13:21 26 4
gpt4 key购买 nike

是否有可用于从给定字符串中提取子字符串的 C 预处理器字符串操作?

我想将表示 __uint128 数字的十六进制字符串分成两个十六进制 64 位 block ,以便为给定类型生成 128 位数字。

如伪代码所示:

#include <inttypes.h>
#include <ctype.h>

#define UINT128_C(X) // extraxt hi (0x == 2) + (ffffffffffffffff == 16) == 18
// extract lo (ffffffffffffffff == 16)
// prepend lo with string "0x" == 18
// (((uint128_t)(hi) << 64) | (uint128_t)(lo))

typedef __uint128_t uint128_t;

uint128_t x;

x = UINT128_C( 0xffffffffffffffffffffffffffffffff );

最佳答案

C 预处理器不能将记号分解成更小的记号,尽管它可以在它们是宏名称的特殊情况下完全替换它们。因此,您不能使用它来物理拆分您事先没有预测到的十六进制数字字符串。

您可以使用预处理器将十六进制数字字符串转换为 C 字符串,然后可能将其包装在转换函数中,例如 strtoull()(如果这恰好合适) .但是,如果该函数特别合适,那么您也可以按原样使用十六进制字符串,或者将 ULL 后缀粘贴到它上面。

关于c - 为 __uint128 数字预处理 C 十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31190789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com