大佬教程收集整理的这篇文章主要介绍了将16位值转换为8位值的有效方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用此代码执行此操作.
#include<stdio.h> #include<stdint.h> int main(int argc,char *argv[]) { int linkIndx,size=128; uint16_t val = 0xABCD; uint8_t vr; vr = val; //this assignment discards upper 8-bits printf("0x%X 0x%X ",val,vr); }
结果:
0xABCD 0xCD
unsigned int val = 0xabcd; unsigned int vr = val & 0xff; assert(vr == 0xcd);
但是当你真的需要这些确切大小的类型时,最好的代码是恕我直言
uint16_t val = 0xabcd; uint8_t vr = (uint8_t) val;
明确的演员在这里记录意图!没有它,一个好的编译器会警告你隐式转换可能会丢失信息(你应该总是启用编译器警告,例如gcc -Wall -Wextra -pedantic,以捕获你意外进行这种转换的情况).
使用精确大小的类型的所有变体的性能应该是相同的,因为一个体面的编译器将为所有变体发出相同的代码.使用unsigned int的版本可能会更好一点.
[编辑]:正如您所询问的内存性能一样:使用uint8_t不太可能获得某些东西,因为某些体系结构需要将小于本机字大小的值与字边界对齐.如果他们不需要它,那么将它们对齐可能仍然会更快,因此编译器可能会决定这样做.这只是引入了未使用的填充字节.使用gcc,您可以使用选项-Os来优化大小,并且由于x86架构是字节可寻址的,这可能导致uint8_t在PC上没有填充的情况下使用,但因此速度较低.大多数情况下,速度与内存是一种权衡,你可以有一个或另一个.
以上是大佬教程为你收集整理的将16位值转换为8位值的有效方法全部内容,希望文章能够帮你解决将16位值转换为8位值的有效方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。