如何通过网络发送更少的比特

时间:2018-11-29 15:36:22

标签: java c algorithm

我需要通过网络发送1,30,786,50,34等整数。每个整数的最大值为1000。发送的整数的最大值为25。

我的任务是以一种占用最少内存的方式发送它们。

我正在考虑可以发送整数的UTF 8表示形式。

如果有更好的方法,请提出建议。

2 个答案:

答案 0 :(得分:3)

UTF-8 是一种可变宽度的字符编码,能够使用一到四个8位字节对Unicode中的所有1,112,064个有效代码点进行编码。因此,由于这与您的既定目标之一最小内存相冲突,因此,这不太可能是您想要的。

此外,请记住,任何网络流量的有效载荷(数据)部分在传输时总是伴随着额外的开销。 ( As described here )。

但是,要解决我认为您要问的问题,请选择一个合适的type,即支持大小标准为0-1000的表{em> Type Data Ranges 会有所帮助。 unsigned _int8unsigned char太小,无法发送价值最高为1000的东西。范围为unsigned short的{​​{1}}将为您服务。

可以通过声明发送缓冲区的方式简单地控制数据的最大大小(或最大字节)。例如:

0 to 65,535

#define MAX_XMIT 25 ... unsigned short sendBuf[MAX_XMIT];// 是2 * 25或50个字节

答案 1 :(得分:0)

您可以直接将其转换为字节数组,而无需使用utf表示形式的直接整数。在Java中,您可以直接使用byte数组;在c中,您可以使用bool数组。要表示1000,您需要2个字节= 2 * 8 = 16位。 (更确切地说10位就足够了)。因此,由于最多有25个值,因此在Java或c ++中,数组大小可以为byte[] bytes = new byte[50],因此可以使用bool arr[25*10]或c unsigned short arr[25]来表示这些数字。只需编写从这些数组值进行编码和解码的方法即可。