2011-07-26 152 views
0

如果我在JavaScript中有一个字符串什么是计算字符串占用的字节数或位数的最佳方法?我的第一个想法是,由于EcmaScript规范(5.1)在8.4中声明EcmaScript中的字符串元素由16位值组成,并且语言使用UTF-16字符编码,所以我应该得到该代码的十进制表示形式(charCodeAt),除以2,结果为底,Bob是你父亲的兄弟。有谁知道如何计算字符串中的字节数?

但如果我每个字符转换为二进制(的toString(2)),以数位,我算的0和1的?或者只是1的?

从我在线阅读(和信息是稀疏的),我想这是这样的:

Math.floor("A".charCodeAt(0)/2); // 32 bits... No? 
+0

这是相当混乱。在M字节符号的字母表上长度为N的字符串需要N×M个字节来表示......这很简单。它需要多个位的8倍。 – Patrick87

+0

@shelman是的,但我是否计算0和1的二进制数?或者只是1,因为1代表“开”状态,而0代表“关”状态。 – Tom

+1

UTF-16不是固定宽度编码(http://unicode.org/faq/utf_bom.html#utf16-1)。一个字符可以占用16位或32位,但通常它可以放入16位。 – Krab

回答

2

@Charlie所以01000001简直是8位?凉。你可以把它变成 的答案,这样我就可以投票了吗?

究竟,见下文。

你需要的,如果有人问你只是计数位来算两个0和1。请记住,“位”是衡量信息内容的标准。因此,如果您有一个信息内容为16位的字段,则表示有2^16种可能的配置,其中您当前的配置仅为一种。您的位串是其中一种配置,但您需要用零来告诉是否来自其他具有16位的配置。 - 查理马丁昨天

另外,你知道有关 的任何好书吗?我自学成才(直到明年)。 :) - 汤姆昨天

我不知道,真的。我搜索了一些,并且一直在学习如何开启计算机的东西,这些东西你已经明显已经掌握了。你可以试试Think like a Computer Scientist

3

嗯,如果字符串中的每个元素是16位的,不会的字符串占用的位数只是string.length * 16?

+0

我可以,但这是一个真正的表示字符串消耗多少内存?我使用这个用于localStorage空间管理,我想配额可以保存多少数据,所以我需要不断计数,你知道吗? – Tom

相关问题