如何在游戏制作者中将字符串转换为二进制表示形式?

How to convert string to binary representation in game maker?

我找到了一个将二进制转换为字符串的脚本,但是如何输入字符串并获得二进制表示形式?所以说我输入 "P" 我希望它输出 01010000 作为字符串。

我有这个,但这不是我想要做的 - 它将包含二进制数的字符串转换为该数字的实际值:

///string_to_binary(string)
var str = argument0;
var output = "";
for(var i = 0; i < string_length(str); i++){
if(string_char_at(str, i + 1) == "0"){
    output += "0";
}
else{
    output += "1";
}
}
return real(output);

提示:搜索GML或其他语言术语,这些问题已回答多次。另外请检查您的标签,因为它是 IDE 标签,而不是语言标签。

我自己不熟悉 GML,但快速搜索显示:

至少半官方的方法是这样的:http://www.gmlscripts.com/script/bytes_to_bin

/// bytes_to_bin(str)
//
//  Returns a string of binary digits, 1 bit each.
//
//      str         raw bytes, 8 bits each, string
//
/// GMLscripts.com/license
{
    var str, bin, p, byte;
    str = argument0;
    bin = "";
    p = string_length(str);
    repeat (p) {
        byte = ord(string_char_at(str,p));
        repeat (8) {
            if (byte & 1) bin = "1" + bin else bin = "0" + bin;
            byte = byte >> 1;
        }
        p -= 1;
    }
    return bin;
}

GML 论坛(有几个例子)https://www.reddit.com/r/gamemaker/comments/4opzhu/how_could_i_convert_a_string_to_binary/

///string_to_binary(string)
var str = argument0;
var output = "";
for(var i = 0; i < string_length(str); i++){
    if(string_char_at(str, i + 1) == "0"){
        output += "0";
    }
    else{
        output += "1";
    }
}
return real(output);


以及其他语言示例:

C++ Fastest way to Convert String to Binary?

#include <string>
#include <bitset>
#include <iostream>
using namespace std;
int main(){
  string myString = "Hello World";
  for (std::size_t i = 0; i < myString.size(); ++i)
  {
      cout << bitset<8>(myString.c_str()[i]) << endl;
  }
}

Java: Convert A String (like testing123) To Binary In Java

  String s = "foo";
  byte[] bytes = s.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes)
  {
     int val = b;
     for (int i = 0; i < 8; i++)
     {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
     }
     binary.append(' ');
  }
  System.out.println("'" + s + "' to binary: " + binary);

JS: How to convert text to binary code in JavaScript?

function convert() {
  var output = document.getElementById("ti2");
  var input = document.getElementById("ti1").value;
  output.value = "";
  for (var i = 0; i < input.length; i++) {
      output.value += input[i].charCodeAt(0).toString(2) + " ";
  }
}

我正在寻找一个简单的 GML 脚本来将十进制转换为二进制和 return 数组中的位。我没有找到任何满足我需要和喜欢的东西,所以我自己动手。简短而甜美。

第一个参数是十进制数(字符串或十进制),第二个参数是位长度。

// dec_to_bin(num, len);
// argument0, decimal string
// argument1, integer

var num = real(argument0);
var len = argument1;
var bin = array_create(len, 0);

for (var i = len - 1; i >= 0; --i) {
    bin[i] = floor(num % 2);
    num -= num / 2;
}

return bin;

用法:

dec_to_bin("48", 10);

输出:

{ { 0,0,0,0,1,1,0,0,0,0 },  }

我认为你说的二进制是计算机使用的二进制,如果是这样,就使用普通二进制并添加一种标识。

binary其实很简单,而不是大多数人想的那样。 每个数字代表前一个数字 *2 (2¹, 2², 2³...) 所以我们得到:

1, 2, 4, 8, 16, 32, 64, 128, 256, 512...

翻转得到:

...512, 256, 128, 64, 32, 16, 8, 4, 2, 1

每个数字都用 1“激活”,加上所有激活的数字,这就是值。

好的,所以二进制基本上是另一种数字系统,它不像代码或其他东西。那么字母和其他字符是如何计算的?

他们不是 ;-;

我们只是将 then 表示为他们在字母表上的顺序,所以:

a=1
b=2
c=3
...

这意味着“b”在二进制中是“10”,但“2”也是“10”。这就是计算机二进制输入的地方。

他们只是在实际号码前加了一个标识,所以:

letter_10 = b
number_10 = 2
signal_10 = "

等等,但是如果那是二进制,上面不能有字母,而是使用另一个 0 和 1,所以:

011_10 = b
0011_10 = 2
001_10 = "

计算机也无法知道数字的开始和结束位置,因此您必须始终使用相同数量的数字,即 8。现在我们得到:

011_00010 = b
0011_0010 = 2
001_00010 = "

然后再次删除“_”,因为计算机将只使用 0 和 1。完成了!

所以我的意思是,只需使用您拥有的代码并将 00110000 添加到值中,或者如果您想将这些数字转换为我想要的字母,只需添加 01100000

如果你有字母并想要二进制,首先将字母转换为数字,因为它只知道字母不从 1 开始,大写字母从 64 开始,非大写字母在96.

ord("p")=112
112-96=16
16 in binary is 10000
10000 + 01100000 = 01110000
"p" in binary is 01110000

ord("P")=80
80-64=16
16 in binary is 10000
10000 + 01000000 = 01010000
"P" in binary is 01010000

这只是对代码应该做什么的解释,实际上我正在寻找一种转换二进制的简单方法,因为我无法理解你展示的大部分代码。

(011) 1000 1111 10000 101 1001 1000 101 1100 10000 101 100