当前位置: 代码迷 >> python >> 将 Wiimote MAC 地址从 C++ 转换为 PIN 到 Python 或 Javascript
  详细解决方案

将 Wiimote MAC 地址从 C++ 转换为 PIN 到 Python 或 Javascript

热度:25   发布时间:2023-06-19 09:28:04.0

在这里找到了以下片段: :

还有另一个代码片段可以将地址转换为密码: :

它试图做的是将 nintendo wiimote 的 mac 地址转换为蓝牙配对期间请求的 pin 号。

我猜这是 C 或 C++,但对 C/C++ 一无所知,但我知道 javascript 和 python。

我想将此代码转换为 javascript 或 python,这样我就可以生成一个有效的STRING引脚编号,在蓝牙配对期间出现提示时可以输入该编号,或者甚至在我了解此代码的确切作用后手动输入。

这是原始片段:

Lets assume the Wiimote has the bluetooth address "00:1E:35:3B:7E:6D". If you want the PIN for bluetooth pairing in a simple string, do the following:

char pin[6];
pin[0] = 0x6D;
pin[1] = 0x7E;
pin[2] = 0x3B;
pin[3] = 0x35;
pin[4] = 0x1E;
pin[5] = 0x00;

Now "pin" contains your bluetooth pin that should be used for pairing your devices.

另一个使用函数的片段:

_TCHAR * FormatBTAddress(BLUETOOTH_ADDRESS address)
{
   static _TCHAR ret[20];
   _stprintf(ret, _T("%02x:%02x:%02x:%02x:%02x:%02x"),
      address.rgBytes[5],
      address.rgBytes[4],
      address.rgBytes[3],
      address.rgBytes[2],
      address.rgBytes[1],
      address.rgBytes[0]
      );
   return ret;
}

现在虽然我对 C++ 一无所知,但我知道这是使用某种(反向)6 字节数组,当我使用 repl.it 上示例中的 MAC 地址运行此代码时,它确实产生了看起来像人类的东西可以作为蓝牙 Pin 输入的可读 4 个字符串:

m~;5

但是,当我用我的实际 mac 地址替换原始 mac 地址时,它会生成不可读的字符,在我看来,这段代码实际上无法工作,并且 wiibrew.org 上的原始海报必须省略某些内容。

这是使用我的实际 MAC 地址:

  char xpin[6];
  xpin[0] = 0x03;
  xpin[1] = 0xF4;
  xpin[2] = 0xB9;
  xpin[3] = 0x6E;
  xpin[4] = 0xAE;
  xpin[5] = 0xB8;
  printf(xpin);

这就是结果,其中包括在提示为有效蓝牙 PIN 码时绝对无法输入的不可打印字符:

??n?? @ 

任何人都可以对此有所了解,因为我不可能看到所提供的代码如何创建可用作蓝牙引脚号的人类可读字符串?

最终,我想用 Javascript 或 Python 对此进行编码,但即使能够手动执行此操作并从 mac 地址生成有效字符串也会有所帮助。

参考 :

PIN 码是反向的 wiimote 的二进制蓝牙地址。

以下似乎是上述内容的更新版本(同一来源):

如果长按1+2键连接,PIN反接为wiimote的蓝牙地址,如果按下wiimote背面的“同步”键连接,PIN反接为主机的蓝牙地址。

所以原始 C 和你的 Python 代码都是正确的。 事实上,结果字符串根本不应该是可读的(并且总是有 6 个字符,可打印或不可打印)。 由 WiiMote 驱动程序来反转 MAC 字符串并将其发送回,就像该页面上描述的所有内容一样。 因此,如果您不是在编写 WiiMote 驱动程序,请为您的系统找到一个(在 Linux 上,它已经作为 BlueZ 插件包含在内,应该可以开箱即用)。

  相关解决方案