java - 在 Java 中压缩字节数组并在 C 中解压缩

标签 java c embedded compression

我目前在 Java 程序中有以下数组,

byte[] data = new byte[800];

我想在通过串行(115200 波特)将其发送到微 Controller 之前对其进行压缩。然后我想用 C 解压缩微 Controller 上的数组。但是,我不太确定最好的方法是什么。性能是一个问题,因为微 Controller 只是一个 arduino,所以它不能太占用内存/cpu。数据或多或少是随机的(编辑 我猜它并不是真的那么随机,请参阅下面的编辑)我会说因为它代表每 16 位的 rgb 颜色值。

压缩这些数据的最佳方式是什么?知道我可以获得多少压缩吗?

编辑

抱歉缺少信息。我需要无损压缩,而且我只打算一次发送 800 个字节。我的问题是,在我使用的 115200 波特率下,800 字节的传输速度不够快。我希望我可以稍微缩小尺寸以提高速度。

每两个字节看起来像:

0RRRRRGGGGGBBBBB

其中 R G 和 B 位分别表示颜色 channel 红色、绿色和蓝色的值。每两个字节就是 20x20 网格上的一个单独的 LED。我会想象许多两个字节的集合是相同的,因为我经常将相同的颜色代码分配给多个 LED。也可能是 RGB 值通常 > 15,因为我通常尽可能使用明亮的颜色(但是,这可能是一个有争议的问题,因为它们通常不会同时 > 15)。

最佳答案

如果数据“或多或少是随机的”,恐怕你压缩它的运气就不太好。

更新

根据新信息,我敢打赌您的 LED 显示屏不需要 32k 色。我想一个 1024 色或 256 色的调色板可能就足够了。因此,您可以采用简单的压缩方案(通过查找表简单地映射每个单词,或者可能只是丢弃每个组件的 lsbs),即使对于完全不相关的像素值也适用。

关于java - 在 Java 中压缩字节数组并在 C 中解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159502/

相关文章:

java - 创建 EntityManager + Junit + HSQLDB 的问题

c - 我如何拒绝使用 C 代码的非数字输入?

c - 在C中将字符串存储在数组中

java - 根据数据库值动态加载jTable中的Image

Java - 检查用户的串行代码格式是否有效的程序

c++ - C 和 C++ 嵌入式编程的定时器类中的 count 有何含义?

linux - 将 shell 脚本与内核操作同步

c - calloc() 替换中的内存对齐问题?

java - 分发 Java 应用程序的最佳方式是什么?

c - 头文件结构中的链接器错误