从“ int”转换为“ unsigned char”可能会改变其值

马拉特

gcc -Wconversion在没有显式(丑陋)强制转换的情况下,如何删除以下代码所产生的警告

int main()
{
  int val;
  unsigned char c1 = (val % 65536) / 256;
  unsigned char c2 = (val % 65536) % 256;
}

有没有一种方法可以告诉编译器,显然转换是在(% 65536) / 256期间隐式完成的% 256

以供参考

$ gcc -Wconversion w.c
w.c: In function ‘main’:
w.c:4:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
w.c:5:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
奇异果

听起来您想要这些结果:

c1 = (val >> 8) & 0xff;
c2 = val & 0xff;

编辑

从gcc Wiki: Wconversion

警告可能会更改值的隐式转换。这包括实数和整数之间的转换,例如x为双精度时的abs(x);有符号和无符号之间的转换,例如unsigned ui = -1; 并转换为较小的类型,例如sqrtf(M_PI)。不要警告像abs((int)x)和ui =(unsigned)-1之类的显式强制类型转换,或者如果像abs(2.0)中那样转换未更改该值,则不要发出警告。可以使用-Wno-sign-conversion禁用有关有符号和无符号整数之间转换的警告。对于C ++,还警告在NULL和非指针类型之间进行转换。用于用户定义的转换的令人困惑的重载解析;以及永远不会使用类型转换运算符的转换:转换为void,相同类型,基类或对其的引用。

如果val为,则不会发生警告,unsigned但是您必须确定要为负值得到的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gcc奇怪的转换警告(从'int'转换为'A <B> :: count_type {aka short unsigned int}'可能会改变其值)

来自分类Dev

从'int'转换为“ USHORT”可能会改变其值

来自分类Dev

从`int`转换为`unsigned char`

来自分类Dev

从“浮动”转换为“ int”可能会改变其价值

来自分类Dev

如何将unsigned int转换为unsigned char数组

来自分类Dev

如何在C中将unsigned char *转换为unsigned int *?

来自分类Dev

将Const char *转换为Unsigned long int-strtoul

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

我可以将unsigned char *强制转换为unsigned int *吗?

来自分类Dev

从unsigned long long转换为unsigned int

来自分类Dev

将int转换为unsigned char数组并向后转换

来自分类Dev

如何在python中将unsigned char类型的int字符串转换为int

来自分类Dev

将unsigned long long int强制转换为signed long long int可能吗?

来自分类Dev

将unsigned int的最大值转换为int并期望结果为-1是否可移植?

来自分类Dev

自动将int转换为unsigned int

来自分类Dev

在C中将char转换为unsigned short

来自分类Dev

将 void (*)() 转换为 void (*)(unsigned char)

来自分类Dev

为什么这里没有将带符号的char转换为unsigned int?

来自分类Dev

目标c将int转换为unsigned char十六进制

来自分类Dev

无法从“ unsigned int *”转换为“ LPDWORD”

来自分类Dev

将QString转换为unsigned short int

来自分类Dev

从unsigned int转换为float时出错

来自分类Dev

memcpy 从 unsigned char * 到 unsigned int

来自分类Dev

从 int16 到 unsigned int16 的转换可能会溢出

来自分类Dev

将“ unsigned char *”转换为“ char *”(和字符串)

来自分类Dev

如何将 const char* 转换为 const unsigned char*

来自分类Dev

从unsigned int转换为uint16_t的转换错误

来自分类Dev

C ++需要将int类型转换为unsigned int

Related 相关文章

  1. 1

    gcc奇怪的转换警告(从'int'转换为'A <B> :: count_type {aka short unsigned int}'可能会改变其值)

  2. 2

    从'int'转换为“ USHORT”可能会改变其值

  3. 3

    从`int`转换为`unsigned char`

  4. 4

    从“浮动”转换为“ int”可能会改变其价值

  5. 5

    如何将unsigned int转换为unsigned char数组

  6. 6

    如何在C中将unsigned char *转换为unsigned int *?

  7. 7

    将Const char *转换为Unsigned long int-strtoul

  8. 8

    将带符号的char转换为C中的unsigned int

  9. 9

    将带符号的char转换为C中的unsigned int

  10. 10

    我可以将unsigned char *强制转换为unsigned int *吗?

  11. 11

    从unsigned long long转换为unsigned int

  12. 12

    将int转换为unsigned char数组并向后转换

  13. 13

    如何在python中将unsigned char类型的int字符串转换为int

  14. 14

    将unsigned long long int强制转换为signed long long int可能吗?

  15. 15

    将unsigned int的最大值转换为int并期望结果为-1是否可移植?

  16. 16

    自动将int转换为unsigned int

  17. 17

    在C中将char转换为unsigned short

  18. 18

    将 void (*)() 转换为 void (*)(unsigned char)

  19. 19

    为什么这里没有将带符号的char转换为unsigned int?

  20. 20

    目标c将int转换为unsigned char十六进制

  21. 21

    无法从“ unsigned int *”转换为“ LPDWORD”

  22. 22

    将QString转换为unsigned short int

  23. 23

    从unsigned int转换为float时出错

  24. 24

    memcpy 从 unsigned char * 到 unsigned int

  25. 25

    从 int16 到 unsigned int16 的转换可能会溢出

  26. 26

    将“ unsigned char *”转换为“ char *”(和字符串)

  27. 27

    如何将 const char* 转换为 const unsigned char*

  28. 28

    从unsigned int转换为uint16_t的转换错误

  29. 29

    C ++需要将int类型转换为unsigned int

热门标签

归档