【问题标题】:How to get size in bits Java如何以比特为单位获取大小 Java
【发布时间】:2012-07-07 05:36:17
【问题描述】:

如何以大端顺序获取 64 位(不是字节)的字符串大小)? 我从来没有在Java中做过这种操作。感谢您的帮助:)。

【问题讨论】:

  • 解释,因为 OP 不想给出一个:他想要整数,即字符串长度(以位为单位)编码为 64 位流的整数,大端。
  • 我给出了所有的解释。我想要一个 64 位格式的字符串的大小。例如 010 这是 2 位,但采用 3 位格式。

标签: java string size endianness


【解决方案1】:

我想你想要这个:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16BE");
int sizeInBits = byteArray.length * 8;

来源:Why does byteArray have a length of 22 instead of 20?

【讨论】:

  • 对,所以乘以 8。一个字节是 8 位。
【解决方案2】:

即使像 x86 这样的平台使用 LittleEndian,Java 在内部也始终使用 BigEndian 顺序。

在 Java 64 位中,值存储在 long 数据类型中。

现在最后一个问题是您要测量什么。在字符串中,您可以计算字符数,或使用指定编码(例如 UTF-8、UTF-16、ISO-8859-1、...)对字符串进行编码时所占用的字节数。

假设你想计算一个字符串中的字符数,并且你想得到一个 64 位的数字,你可以使用下面的代码:

String myString = "abcdefgh";
long charCount = myString.length;

如果您想将charCount 写入文件或网络连接,您可以使用 DataOutputStream 获取 BigEndian 表示:

DataOutputStream out = new DataOutputStream(streamToWriteTo);
out.writeLong(charCount);

【讨论】:

    【解决方案3】:

    诶?字符串只能以字符或字节为单位进行测量,并且只有在您为编码指定特定字符集时才能这样做。

    对于后者,它只是string.getBytes(charset).length

    如果我们知道您的实际操作可能会有所帮助。

    【讨论】:

    • 嗯,你总是可以用字节转换成比特。
    • OP 显然是将字符串推入比特流。他需要将其长度(以位为单位)编码为 64 位大端整数(再次作为位流访问),然后将字符串本身作为位流发送(这是他之前的问题)。跨度>
    猜你喜欢
    • 2013-02-01
    • 2020-04-20
    • 1970-01-01
    • 2017-02-21
    • 2023-02-04
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多