转换方面的差异:char 与 unsigned char

问题描述 投票:0回答:1

在这个函数中,为什么我们需要使用 unsigned char 进行转换?由于两者的范围都是“255”,我们不能用 char 进行转换并得到相同的结果吗?为什么选择无符号字符?

假设没有等于-126的ASCII码。我对 255 也可以这么说;两者都会给你一个垃圾值。如果你告诉我我们选择它是因为我们正在处理字节,并且它的最大值是 255,我会说我们只是在比较。因此,在 s1 和 s2 中,结果将始终是 ASCII 代码。为什么我们选择unsigned char?

#include "libft.h"

int ft_strncmp(const char *s1, const char *s2, size_t n)
{
    size_t  i;

    i = 0;
    if (n == 0)
        return (0);
    while (i < n && (s1[i] != '\0' || s2[i] != '\0'))
    {
        if (s1[i] != s2[i])
            return ((unsigned char)s1[i] - (unsigned char)s2[i]);
        i++;
    }
    return (0);
}
c types casting char unsigned-char
1个回答
0
投票

标准库执行 string 函数,就好像字符是

unsigned char

由于

char
可能是 signedunsigned,当
char
之一为负数时,减去 2
unsigned char
的结果与 2
char
的结果不同。因此,转换为
unsigned char
会像 C 库一样形成差异。

© www.soinside.com 2019 - 2024. All rights reserved.