这种数据如何压缩

ryfdizuo 2012-09-28 08:16:01
[0 -2] [0 0] [0 -4] [0 0] [0 2] [0 0] [-1 -2] [0 0] [0 -11] [0 0] [0 -3]
中括号中是一个顶点,[x y]
我现在用一个char分别表示x和y坐标,一个顶点要用2 bytes。假设 x,y 绝对值都不大于32,如何能用一个byte表示一个点?
大伙给点建议,谢谢了~
...全文
260 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
swp543210 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

在做数据压缩,这种数据很多。用一个byte表示一个点 数据量能降一半。
To 5楼,可能正负,负数移位不太好处理。
[/Quote]

负数只是补码而已,你把BYTE换成char就可以了
idealgod123 2012-09-29
  • 打赏
  • 举报
回复
既然你偶数为都是[0,0],那你可以把存这[0,0]的byte给奇数位,在需要数据的时候,在每个数据后面在补充个[0,0],做个很简单的算法应该就可以了··
ryfdizuo 2012-09-28
  • 打赏
  • 举报
回复
在做数据压缩,这种数据很多。用一个byte表示一个点 数据量能降一半。
To 5楼,可能正负,负数移位不太好处理。
swp543210 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

因为是byte能保存256种状态嘛,而x和y分别是64种状态。所以一个byte肯定足够了,

但是问题是,你的容量缩小了,但是访问速度就下去了。
[/Quote]
正解
我做DLA扩散的时候,一开始每个格点1位占用10M内存,不快
改成1格点1字节后快了一点,10%吧不记得了
就是内存占用变成8倍了,但是对齐字节,写程序也容易
healer_kx 2012-09-28
  • 打赏
  • 举报
回复
因为是byte能保存256种状态嘛,而x和y分别是64种状态。所以一个byte肯定足够了,

但是问题是,你的容量缩小了,但是访问速度就下去了。
swp543210 2012-09-28
  • 打赏
  • 举报
回复
char i; 
BYTE x = 30, y = 17;
i = (i & 0x0F) | (x < <4 & 0xF0); // x
i = (i & 0xF0) | (y & 0x0F); // y

BYTE x = i>>4;
BYTE y = i & 0x0F;
swp543210 2012-09-28
  • 打赏
  • 举报
回复
[code=c/c++]char i;
BYTE x = 30, y = 17;
i = (i & 0x0F) | (x<<4 & 0xF0); // x
i = (i & 0xF0) | (y & 0x0F); // y

BYTE x = i>>4;
BYTE y = i & 0x0F;[/code]
大熊猫侯佩 2012-09-28
  • 打赏
  • 举报
回复
节约那6各位有意思吗?
大熊猫侯佩 2012-09-28
  • 打赏
  • 举报
回复
你觉得2个字节太浪费?还要压缩?我看不必了吧
ryfdizuo 2012-09-28
  • 打赏
  • 举报
回复
补充一点:跟中括号没有关系,输出时用中括号格式化~

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧