【问题标题】:How to send less no of bits over networks [closed]如何通过网络发送更少的比特[关闭]
【发布时间】:2019-05-01 17:22:06
【问题描述】:

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

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

我认为可以发送整数的 UTF 8 表示。

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

【问题讨论】:

  • 家庭作业问题。你试过什么。在您的情况下,“记忆”是什么意思?
  • 你没有说出你正在使用什么或你尝试过什么。例如,您没有说明为什么要使用字符串而不是几个 16 位数字。
  • 投票重新开放。该帖子已被编辑,以试图澄清提问者的原始预期问题。尽管原始形式难以解释,但它似乎确实提出了我认为普遍有用的问题,即如何在发送字节数据时最小化数据包大小。请考虑重新开放,或向 OP 提出其他建议以重新编辑。

标签: java c algorithm


【解决方案1】:

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

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

但是,要解决我认为您要问的问题,请选择一个合适的 type,即支持 0 - 1000 大小标准的表格,Type Data Ranges 会有所帮助。 unsigned _int8unsigned char 太小,无法发送价值高达 1000 的东西。 unsigned short 具有0 to 65,535 的范围能力将为您工作。

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

#define MAX_XMIT 25
...
unsigned short sendBuf[MAX_XMIT];//

sizeof(sendBuf)/sizeof(sendBuf[0]) 是 2 * 25,即 50 个字节

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 2019-02-14
      • 2013-04-11
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      相关资源
      最近更新 更多