可以将有符号字符数组转换为无符号整数吗?

发布于 2025-01-05 15:31:05 字数 446 浏览 1 评论 0原文

我有一个像这样转换为有符号字符的无符号整数,

  unsigned int b = 128;
  char a[4];    

  a[0] = b >> 24;
  a[1] = b >> 16;
  a[2] = b >> 8;
  a[3] = b >> 0;

在不知道 b 的值是什么的情况下,我可以取回该数字吗?对于大于 128 的数字,下面的方法会失败。从数组中获取数字似乎存在一些歧义。

  unsigned int c = 0;  
  c += a[0] << 24;
  c += a[1] << 16;
  c += a[2] << 8;
  c += a[3];

  cout<<c<<endl;

I have a unsigned int that was converted to a signed char like this

  unsigned int b = 128;
  char a[4];    

  a[0] = b >> 24;
  a[1] = b >> 16;
  a[2] = b >> 8;
  a[3] = b >> 0;

Without knowing what value of b is, can I get back the number? The method below fails for numbers greater than 128. It seems like there is some ambiguity to getting the number back from the array.

  unsigned int c = 0;  
  c += a[0] << 24;
  c += a[1] << 16;
  c += a[2] << 8;
  c += a[3];

  cout<<c<<endl;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何止钟意 2025-01-12 15:31:05
unsigned int c = ((a[0] << 24) & 0xFF000000U)
               | ((a[1] << 16) & 0x00FF0000U)
               | ((a[2] <<  8) & 0x0000FF00U)
               | ( a[3]        & 0x000000FFU);

或者

unsigned int c = unsigned(a[0]) << 24
               | unsigned(a[1]) << 16
               | unsigned(a[2]) <<  8
               | unsigned(a[3]);
unsigned int c = ((a[0] << 24) & 0xFF000000U)
               | ((a[1] << 16) & 0x00FF0000U)
               | ((a[2] <<  8) & 0x0000FF00U)
               | ( a[3]        & 0x000000FFU);

or

unsigned int c = unsigned(a[0]) << 24
               | unsigned(a[1]) << 16
               | unsigned(a[2]) <<  8
               | unsigned(a[3]);
π浅易 2025-01-12 15:31:05

不建议将signed 转换为unsigned。如果您确实想要执行此操作,则必须手动执行。不容易,据我所知。

看看这个问题。

Converting signed to unsigned is not advised. If you do want to do it, you have to do it manually. Not easy, AFAIK.

Have a look at this question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文