0

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

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

<?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 来做同样的事情。任何帮助,将不胜感激

4

2 回答 2

2

如果您想在 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 的字符,则其行为与PHP 或 C 类型中的charCodeAt行为相同,但是您提供的示例包含非 ASCII 字符,因此 Unicode(有时很复杂)规则将发挥作用。ordchar

请参阅charCodeAt此处的文档:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt

于 2013-03-30T10:47:56.210 回答
1

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
于 2013-03-30T11:15:32.207 回答