我需要通过网络发送1,30,786,50,34
等整数。每个整数的最大值为1000。发送的整数的最大值为25。
我的任务是以一种占用最少内存的方式发送它们。
我正在考虑可以发送整数的UTF 8表示形式。
如果有更好的方法,请提出建议。
答案 0 :(得分:3)
UTF-8 是一种可变宽度的字符编码,能够使用一到四个8位字节对Unicode中的所有1,112,064个有效代码点进行编码。因此,由于这与您的既定目标之一最小内存相冲突,因此,这不太可能是您想要的。
此外,请记住,任何网络流量的有效载荷(数据)部分在传输时总是伴随着额外的开销。 ( As described here )。
但是,要解决我认为您要问的问题,请选择一个合适的type
,即支持大小标准为0-1000的表{em> Type Data Ranges 会有所帮助。 unsigned _int8
或unsigned 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]
来表示这些数字。只需编写从这些数组值进行编码和解码的方法即可。