【问题标题】:Convert from int to char in C with cutoff在 C 中使用 cutoff 从 int 转换为 char
【发布时间】:2016-02-25 22:03:54
【问题描述】:

我需要在 C 中将 int 转换为 unsigned char。如果 int > 255 char 将为 255,如果 in

我试过了:

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

但它还没有工作(它环绕,即 c = i % 256)。

【问题讨论】:

  • 您想将int饱和到char?一些处理器对此有说明。
  • char 具有实现定义的签名。如果您的意思是 unsigned char,请不要询问 char(当然,这是正确的类型)。

标签: c


【解决方案1】:

只需编写您想要的代码。

unsigned char convert(int j)
{
    if (j >= 255) return 255;
    if (j < 0) return 0;
    return (unsigned char) 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;
}

【讨论】:

  • 这行得通,但是有没有使用位操作的转换?还是 memcpy?
  • @DzungNguyen 你有什么理由想让事情变得不那么高效和更难理解吗?
  • @DzungNguyen 您要求根据特定情况更改值。 Casting 和 memcpy 不会那样做。
  • @DzungNguyen 如果它有更多的指令,那只是因为它无法优化。如果不能优化,就不能优化。尽可能把你的意思写清楚,如果编译器可以优化它,它就会。
  • @DzungNguyen:编写可读和可理解的代码。首先将优化留给编译器。现代编译器通常比大多数人更聪明。如果f 确实在基准测试中被证明太慢,则分析,然后优化热点。
猜你喜欢
  • 2014-02-07
  • 2013-08-10
  • 2018-02-10
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多