gpt4 book ai didi

c - C语言中Hex转Integer的方法,不能小写!

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:21 24 4
gpt4 key购买 nike

大家好,快点,我可以将十六进制转换为整数,但我需要将数字变为小写。这就是我所拥有的,有什么想法可以让 A 到 F 不区分大小写吗?

int htoi(char f[]) {
int z, n;
n = 0;

for (z = 0; f[z] >= '0' && f[z] <= 'F'; ++z)
if (f[z] >= 'A' && f[z] <= 'F')
n = 10 + 16 * n + (f[z] - 'A');
else
n = 16 * n + (f[z] - '0');
}

可能只是一件小事,但我想包括 a-f 和 A​​-F。感谢您的帮助!

最佳答案

如果您这样做是为了学习如何做,请忽略这篇文章。如果您使用此函数是因为需要将一串十六进制数字转换为 int,那么您应该在标准库中走走。标准函数strtol()将字符串转换为 long,后者可以转换为 int(或 unsigned int)。第三个参数是要转换为的基数——在本例中,您需要将基数 16 转换为十六进制。此外,如果给定基数 0,如果字符串以 0x 开头,它将假定为十六进制,如果以 0 开头,则假定为八进制,否则为十进制。这是一个非常有用的功能。


编辑:刚刚注意到这一点,但是当我们在这里时,值得一提的是您通常不应该使用 int 来索引数组。 C 标准定义了一种类型,称为 size_t,它被设计用来存储数组索引。它通常是 unsigned intunsigned long 之类的东西,但保证足够大以存储您可以使用的任何数组或指针偏移量。

仅使用 int 的问题在于,从理论上讲,也许有一天,有人可以传递比 INT_MAX 更长的字符串,然后是您的 int 会溢出,可能会环绕,并开始读取它可能不应该读取的内存,因为它使用的是负索引。这是极不可能的,尤其是对于这样的函数,因为您返回的 int 值会在您的 int 计数器溢出很久之前溢出,但它 需要牢记的重要事项。

为了在技术上正确,你应该只使用 size_t 类型变量来索引数组,或者至少只使用 unsigned 类型,除非你真的想尝试访问负数元素(这通常是个坏主意,除非你知道自己在做什么)。但是,这在这里不是什么大问题。

关于c - C语言中Hex转Integer的方法,不能小写!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416571/

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