arrays - 将 wchar_t[] 字符串的元素添加到 array<wchar_t>^ 而不使用 for 循环

标签 arrays visual-c++ c++-cli

我正在编写一个 vc++ CLR 表单项目,它将通过串行端口控制我的机器人。机器人期望的 ASCII 命令如下:第一个字节是 A 和 Z 之间的字符,决定要执行的命令,第二个字符是 + 或 - 符号,然后正好有 5 个数字。如果要发送的号码少于 5 位,则在开头用零填充。

我正在使用 System::IO::Ports::SerialPort 与具有以下原型(prototype)的 COM 端口进行通信:

public:
void Write(
    array<wchar_t>^ buffer, 
    int offset, 
    int count
)

由于我需要填充数字,使其恰好是 5 位数字,因此我使用 sprintf。 (我仍在学习 c++,并且还没有太多使用 String::Format 的经验,但我认为我可以在那里轻松地做同样的事情 - 但现在我想使用这些数组来完成它,为了学习)。

sprintf 返回 wchar_t 的字符串,我现在需要将这些 wchar_t 添加到 中以传递给函数,但是我很难找到一个优雅的解决方案。我的解决方案有效,但是 for 循环对我来说真的很老套:

int DeltaForm::setThetas(int th1, int th2, int th3)
{
// Cannot write more than 5 digits
if (th1 < 1000 && th2 < 1000 && th3 < 1000)
{
    wchar_t commandBuffer[8];
    array<wchar_t>^ buffer = gcnew array<wchar_t>(8);

    _snwprintf_s(commandBuffer, 8, 7, L"B+%05d", th2*100);
    for (int i = 0; i < 8; i++)
    {
        buffer->SetValue(commandBuffer[i], i);
    }
    this->serialComms->Write(buffer, 0, 7);

    _snwprintf_s(commandBuffer, 8, 7, L"A+%05d", th1*100);
    for (int i = 0; i < 8; i++)
    {
        buffer->SetValue(commandBuffer[i], i);
    }
    this->serialComms->Write(buffer, 0, 7);

    _snwprintf_s(commandBuffer, 8, 7, L"C+%05d", th3*100);
    for (int i = 0; i < 8; i++)
    {
        buffer->SetValue(commandBuffer[i], i);
    }
    this->serialComms->Write(buffer, 0, 7);
}
else
{
    return 0;
}
}

我查看了数组类,但找不到任何可以帮助我的方法。有没有更简单、更优雅的方式来填充数组?

谢谢

最佳答案

如果将指针固定到数组,则可以本地处理它,例如:

array<wchar_t>^ buffer = gcnew array<wchar_t>(8);
pin_ptr<wchar_t> p = &buffer[0];
_snwprintf_s(p, 8, 7, L"B+%05d", th2*100);
this->serialComms->Write(buffer, 0, 7);

我还想详细说明@Adriano 提出的观点。您似乎在整个代码中使用托管 C++,虽然它是专门为将 C++ 与 CLR 混合而设计的,但最好坚持使用一种方法。

System::String^ command = String::Format("B+{0:00000}", th2*100);
array<Byte>^ command_buffer = System::Text::Encoding::Unicode->GetBytes(command);

该示例使用 Unicode,因为 Windows 操作系统使用 UTF-16 来表示 wchar 值,但如果这是线路上所期望的,则应将其切换为 ASCII。

关于arrays - 将 wchar_t[] 字符串的元素添加到 array<wchar_t>^ 而不使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21060016/

相关文章:

arrays - 合并数组时继承自定义方法

c++ - 如何重写给定的贪婪正则表达式模式?

c++ - 如果在运行时添加两个按钮,mfc 按钮将显示不完整

c++ - 使用多种类型时是否可以减少我的编译时间?

c++ - 混合托管/非托管 C++?

c++ - C++中的LinkedList char数组数据

java - 在游戏中创建 NPC 数组

c++ - 当使用指向数组的指针时,我们迭代什么?

.net - 将 String^ 编码为字符串。使用 marshal.h 出错

interface - C++/CLI : Cannot explicitly implement interface member with different return type