【问题标题】:Get the Value of a byte with Javascript使用 Javascript 获取字节的值
【发布时间】:2013-03-30 10:41:59
【问题描述】:

我不确定这个标题是否有意义,但这是我需要的。

这是我的字节:��������ˇ������0F*E��ù� � 我已经设法用这个 php sn-p 获取这个字节的值:

<?php
$var = "���������ˇ�����0F*E��ù�";

for($i = 0; $i < strlen($var); $i++)
{
   echo ord($var[$i])."<br/>";
}
?>

结果是: 0 0 0 0 0 0 0 0 2 2 0 255 0 0 0 0 0 2 48 70 1 42 69 0 0 1 157 0

但是现在我需要在没有 php 的情况下使用 Java Script 来做同样的事情。 任何帮助将不胜感激

【问题讨论】:

  • 我认为您使用的术语不正确:首先,JavaScript 没有“字节”的概念,其次,大多数计算机中的字节是 8 位值,您的意思是ve 看起来像一串文本。
  • 你在javascript中有什么?在 javascript 中,字符串不像在 PHP 中那样是字节数组。在 javascript 中,字符串不同于 Uint8Array/Buffer

标签: javascript string byte


【解决方案1】:

如果你想在 JavaScript 中获取字符串中每个字符的数值,可以这样做:

var someString = "blarg";

for(var i=0;i<someString.length;i++) {
    var char = someString.charCodeAt(i);

}

String.charCodeAt(index) 返回字符串中指定字符的 Unicode 码位值。它不像 PHP 或 C 那样返回固定的 8 位编码(即 ASCII)的数值。假设您的字符串是人类可读的字符串(与原始二进制数据相反),那么使用 charCodeAt 就可以了。如果您使用的是原始二进制数据,请不要使用 JavaScript 字符串。

如果您的字符串包含 Unicode 代码点低于 128 的字符,则 charCodeAt 的行为与 PHP 中的 ord 或 C 的 char 类型相同,但是您提供的示例包含非 ASCII 字符,所以Unicode 的(有时很复杂)规则将发挥作用。

在此处查看charCodeAt 上的文档:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt

【讨论】:

  • PHP“字符串”表示任意二进制数据,而不仅仅是 ASCII 甚至字符。
  • @Esailija 这就是我的意思:)
  • @Dai 谢谢。我尝试了您的解决方案,得到了这个:65533 这是带有您的代码的 URL:ayroa.com/goproapp/test.html 我不知道有什么问题,但我需要这是我的输出:0 0 0 0 0 0 0 0 2 2 0 255 0 0 0 0 0 2 48 70 1 42 69 0 0 1 157 0
【解决方案2】:

PHP 字符串计算为 8 位(字节 0..255),而 JavaScript 使用 16 位 unicode 字符 (0..65535)。根据您的字符串,您可以将其拆分为(16 位)字符代码或字节。如果您知道您的字符串仅包含 8 位字符,您可以忽略“hiByte”(见下文)以获得与 PHP 中相同的结果。

function toByteVersionA(s) {
    var len = s.length;
    // char codes
    var charCodes = new Array();
    for(var i=0; i<len; i++) {
        charCodes.push(s.charCodeAt(i).toString());
    }
    var charCodesString = charCodes.join(" ");
    return charCodesString;
}

function toByteVersionB(s) {
    var len = s.length;
    var bytes = new Array();
    for(var i=0; i<len; i++) {
        var charCode = s.charCodeAt(i);
        var loByte = charCode & 255;
        var hiByte = charCode >> 8;
        bytes.push(loByte.toString());
        bytes.push(hiByte.toString());
    }
   var bytesString = bytes.join(" ");
   return bytesString;
}

function toByteVersionC(s) {
   var len = s.length;
   var bytes = new Array();
   for(var i=0; i<len; i++) {
        var charCode = s.charCodeAt(i);
        var loByte = charCode & 255;
        bytes.push(loByte.toString());
   }
   var bytesString = bytes.join(" ");
   return bytesString;
}

var myString = "abc"; // whatever your String is
var myBytes = toByteVersionA(myString); // whatever version you want

【讨论】:

  • 谢谢。我真的对Java Script一无所知。在您的代码中,我必须在哪里输入字符串“ˇ0F*Eù”?我怎样才能得到最终数字的输出,就像在 php 脚本中一样?
  • 我已经修改了代码,因此您可以输入您的字符串(变量 myString)并获取转换后的字节(变量 myBytes)。
猜你喜欢
  • 2013-04-21
  • 1970-01-01
  • 2015-02-20
  • 2017-01-22
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多