当前位置:  开发笔记 > 编程语言 > 正文

将char填充到unsigned short:幕后会发生什么?

如何解决《将char填充到unsignedshort:幕后会发生什么?》经验,为你挑选了1个好方法。

鉴于此字段:

char lookup_ext[8192] = {0}; // Gets filled later

而这句话:

unsigned short *slt = (unsigned short*) lookup_ext;

幕后发生了什么?

lookup_ext [1669]返回67 = 0100 0011(C),lookup_ext [1670]返回78 = 0100 1110(N),lookup_ext [1671]返回68 = 0100 0100(D); 但是slt [1670]返回18273 = 0100 0111 0110 0001.

我想把它移植到C#,所以除了一个简单的方法,我也想知道这里到底发生了什么.我经常使用C++已经有一段时间了.

谢谢!



1> CB Bailey..:

您显示的语句不会将char转换为unsigned short,它会将指向 char的指针转换为指向 unsigned short 的指针.这意味着指向数据的通常算术转换不会发生,并且当通过slt变量访问时,底层char数据将被解释为unsigned short .

注意,sizeof(unsigned short)不太可能是一个,因此slt[1670]不一定对应lookup_ext[1670].更有可能 - 比方说,如果sizeof(unsigned short)是两个 - 对应lookup_ext[3340]lookup_ext[3341].

你知道为什么原始代码使用这种别名吗?如果没有必要,可能值得尝试使C++代码更清洁,并在移植之前验证行为是否保持不变.


通常,但他们不一定如此.例如,字符和无符号短路都可以是32位.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有