C中中Union的巧妙用法的巧妙用法
union巧妙地实现多字节数据类型之间的转化;使不同数据包兼容。
1 union巧妙地实现多字节数据类型之间的转化
在涉及音视频编解码算法中,经常会涉及一些数据压缩、声音解码、图象的缩放等问题。
这里通过一个例子来推荐一种union绝妙用法(这种方法由Equator公司提供,在我们公司的图象处理算法中用得很多)。在该例
子中,利用union结构n64u实现占8个字节n64类型与单字节的c0~c7的相互转换,从而达到数据压缩和分解的目的。
#include <stdio.h>
#define IN
#define OUT
#define INOUT
typedefunsigned long longn64;
typedef unsigned int n32;
typedef unsigned shortn16;
typedef unsigned charn8;
typedef struct_s8t{
unsigned charc0, c1, c2, c3, c4, c5, c6, c7;
}s8t;
typedefunion{
n64n64;
struct {
n32 l0, l1;
}u32;
struct {
long l0, l1;
} s32;
struct {
unsigned short s0, s1, s2, s3;
} u16;
struct {
short s0, s1, s2, s3;
} s16;
struct {
unsigned char c0, c1, c2, c3, c4, c5, c6, c7;
}u8;
struct {
char c0, c1, c2, c3, c4, c5, c6, c7;
} s8;
评论0
最新资源