嘿大家,只是一个快速的事情,我有十六进制到整数工作,但我需要将数字小写.这就是我所拥有的,任何想法让A到F 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');
}
Run Code Online (Sandbox Code Playgroud)
可能只是一件小事,但我想包括af和AF.谢谢你的帮助!
如果你这样做是为了学习如何做,请忽略这篇文章.如果您正在使用此函数,因为您需要将十六进制数字的字符串转换为a int,则应该在标准库中进行操作.标准函数strtol()将字符串转换为a long,可以将其转换为int(或者是unsigned int一段时间).第三个参数是转换为的基数 - 在这种情况下,您希望16进制为十六进制.另外,如果给定基数为0,则如果字符串以字符串开头则为十六进制,如果以字符串开头0x则为octal 0,否则为十进制.这是一个非常有用的功能.
编辑:刚刚注意到这一点,但是我们在这里时,值得一提的是你通常不应该使用int索引数组.C标准定义了一个名为的类型,size_t用于存储数组索引.它通常是一个unsigned int或者unsigned long什么,但保证足够大,可以存储您可以使用的任何数组或指针偏移量.
使用a的问题int在于,从理论上讲,有一天,某人可能会传递一个字符串超过INT_MAX,然后你的int意志会溢出,可能会回绕,并开始读取内存,它可能不应该因为它使用负索引.这是非常不可能的,特别是对于这样的函数,因为int您返回的值会在int计数器溢出之前很久就会溢出,但要记住这一点很重要.
为了在技术上正确,你应该只使用size_t类型变量来索引数组,或者至少只使用unsigned类型,除非你真的想尝试访问负面元素(除非你知道你在做什么,这通常是一个坏主意).但是,这不是一个大问题.
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |