Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中用截断从int转换为char_C - Fatal编程技术网

在C语言中用截断从int转换为char

在C语言中用截断从int转换为char,c,C,我需要将int转换为C中的无符号字符。如果int>255,字符将是255,如果in=255)返回255; 如果(j

我需要将int转换为C中的无符号字符。如果int>255,字符将是255,如果in<0,字符将是0。否则char等于int。在C中如何实现

我试过:

int i;
unsigned char c;
c = (unsigned char) i;

但它还没有起作用(它是环绕的,即c=i%256)。

只需编写您想要的代码即可

unsigned char convert(int j)
{
    if (j >= 255) return 255;
    if (j < 0) return 0;
    return (unsigned char) j;
}
无符号字符转换(int j)
{
如果(j>=255)返回255;
如果(j<0)返回0;
返回(无符号字符)j;
}
这可能会执行得更好(在我的机器上,6条指令,没有分支),尤其是当大多数值在0-255范围内时:

unsigned char convert(int j)
{
    unsigned char j2 = (unsigned char) j;
    if (j == j2) return j2;
    return (j < 0) ? 0 : 255;
}
无符号字符转换(int j)
{
无符号字符j2=(无符号字符)j;
如果(j==j2)返回j2;
返回值(j<0)?0:255;
}

只需编写您想要的代码即可

unsigned char convert(int j)
{
    if (j >= 255) return 255;
    if (j < 0) return 0;
    return (unsigned char) j;
}
无符号字符转换(int j)
{
如果(j>=255)返回255;
如果(j<0)返回0;
返回(无符号字符)j;
}
这可能会执行得更好(在我的机器上,6条指令,没有分支),尤其是当大多数值在0-255范围内时:

unsigned char convert(int j)
{
    unsigned char j2 = (unsigned char) j;
    if (j == j2) return j2;
    return (j < 0) ? 0 : 255;
}
无符号字符转换(int j)
{
无符号字符j2=(无符号字符)j;
如果(j==j2)返回j2;
返回值(j<0)?0:255;
}

这是可行的,但是否存在使用位操作的强制转换?或者memcpy?@Dzunguyen你有什么理由想让事情变得效率更低、更难理解吗?@Dzunguyen你要求根据某些情况改变价值。Casting和memcpy不会这样做。@DzungNguyen如果它有更多的指令,那只是因为它无法优化。如果它不能被优化,它就不能被优化。尽可能清楚地写下你的意思,如果编译器能优化它,它就会。@Dzunguyen:写可读和可理解的代码。首先将优化留给编译器。现代编译器通常比大多数人更聪明。如果这真的证明在基准测试、配置文件和优化热点方面太慢,那么这是可行的,但是有没有使用位操作的转换?或者memcpy?@Dzunguyen你有什么理由想让事情变得效率更低、更难理解吗?@Dzunguyen你要求根据某些情况改变价值。Casting和memcpy不会这样做。@DzungNguyen如果它有更多的指令,那只是因为它无法优化。如果它不能被优化,它就不能被优化。尽可能清楚地写下你的意思,如果编译器能优化它,它就会。@Dzunguyen:写可读和可理解的代码。首先将优化留给编译器。现代编译器通常比大多数人更聪明。如果这在基准测试中被证明太慢,请分析,然后优化热点。是否要将
int
饱和为
char
?有些处理器有这方面的指令。
char
有实现定义的符号。如果您的意思是
无符号字符
(当然,这是正确的使用类型),请不要要求
字符
。是否要将
int
饱和为
字符
?有些处理器有这方面的指令。
char
有实现定义的符号。如果您的意思是
无符号字符
(当然,这是正确的类型),请不要要求使用
字符。