gpt4 book ai didi

c++ - 将 Delphi 的字符串转换为 C++ 的 std::string

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:06 25 4
gpt4 key购买 nike

我正在开发一个设备 (ESP32),有一个 rxValue 变量定义如下;

std::string rxValue = pCharacteristic->getValue(); <- ESP32 (C++) side

但是我需要通过 SetValueAs... 方法从 Delphi App 发送数据(字符串或字符)但是当我使用

Characteristics.SetValueAsString('b'); <- Delphi side (but problematic)

编辑:我在这里添加 SetValueAsString 程序

procedure TBluetoothGattCharacteristic.SetValueAsString(const AValue: string; IsUTF8: Boolean);
begin
if IsUTF8 then
Value := TEncoding.UTF8.GetBytes(AValue)
else
Value := TEncoding.Unicode.GetBytes(AValue);
end;

Arduino 串行监视器显示一个奇怪的字符(方 block )并且无法执行命令。

    for (int i = 0; i < rxValue.length(); i++) {   <- ESP32 (C++) side
Serial.print(rxValue[i]);
}

if (rxValue.find("a") != -1) {
digitalWrite(LED, HIGH);
}

因此,从Delphi向C++(ESP32板)发送字符串作为std::string的方式是什么。另外(我不想单独问一个小问题。) rxValue 与 string 的精确比较方式是什么?我的意思是,如果 rxValueabcdef 完全相同,则执行命令?现在谢谢..

最佳答案

深入研究后,问题变得更加复杂。正如@RemyLebeau 指出的那样,主要问题是 8 位/16 位字符串不兼容,@David Heffernan 是正确的,因为您不能使用 std::string 进行跨编程语言的互操作。

所以我决定将我的数据转换为 8 位 AnsiString 并发送,但这次我发现 Delphi 不再支持移动编译器中的 AnsiChar 和 AnsiString(您可以阅读 herehere)。

所以我不能在 Delphi Mobile 中使用 8 位字符串(很多人向 Embarcadero 问“为什么”,因为这意味着您不能使用使用 8 位的设备(许多物联网设备))但谢天谢地,有一些优秀的人使用自定义库解决了这个问题(您可以找到来源 here)。

将此库添加到我的应用程序并执行如下命令后,问题已解决;

Characteristics.SetValueAsString(RawByteString('b'));

但答案是:您不能以这种方式使用 std::string,它不适合互操作。

关于c++ - 将 Delphi 的字符串转换为 C++ 的 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57223260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com