2

我是一名 C++ 开发人员,上周转到 wpf。好吧,我在我的 c++ 应用程序中使用了 sprintf 很多次,现在我需要在 C# 中使用与它等效的东西。这是我所做的是C++:

char t_str[4] = {};
for(int i = 0; i < 4; i++)
{ 
    sprintf(t_str, "%02X", buffer[i]);
m_apiResponse[i]->setText(String(t_str));
}

wherebuffer[0] = 20; buffer[1] = 30; buffer[2] = 40; buffer[3] = 50;m_apiResponse是一个文本框。

我在我的 C# 中这样做了,如下所示:

Byte[] t_str = new Byte[4];
for (int i = 0; i < 4; i++)
{
         string bufstring = String.Format("{0:02}", buffer[i]);
         t_str = Encoding.UTF8.GetBytes(bufstring);
}

Response1Box = Convert.ToString(t_str[0]);
Response2Box = Convert.ToString(t_str[1]);
Response3Box = Convert.ToString(t_str[2]);
Response4Box = Convert.ToString(t_str[3]);

其中 ResposeBox 是我绑定到的文本框:

// Description of Response1Box
    private string _Response1Box;
    public string Response1Box
    {
        get
        {
            return _Response1Box;
        }

        set
        {
            _Response1Box = value;
            OnPropertyChanged("Response1Box");
        }
    }

buffer[64]是字节[]。

它没有给我我的 C++ 方法所做的预期答案。这是正确的做法吗:string bufstring = String.Format("{0:02}", buffer[i]); t_str = Encoding.UTF8.GetBytes(bufstring);我错在哪里???

请帮忙 :)

4

3 回答 3

5

尝试

string bufstring = String.Format("{0:D2}", buffer[i]);

或(用于十六进制输出)

string bufstring = String.Format("{0:X2}", buffer[i]);

或(带有 C/C++ 样式的十六进制前缀)

string bufstring = String.Format("0x{0:X2}", buffer[i]);

请参阅复合格式标准数字格式字符串

当然,在您调用的 C++ 循环中m_apiResponse[i]->setText,您应该在 C# 循环中执行类似的操作以达到相同的结果。

string[] response = new TextBox[] {Response1Box, Response2Box, Response3Box, Response4Box};
for (int i = 0; i < 4; i++)
     response[i] = String.Format("{0:X2}", buffer[i]);

更新:我不清楚 ResponseBox 是什么,但如果您在名为 ResponseBox 的对象实例中有 4 个名为 Response[X]Box 的字符串属性,那么您可以通过这种方式在循环外设置这些属性

ResponseBox.Response1Box = response[0];
ResponseBox.Response2Box = response[1];
.......
于 2012-10-26T15:01:03.413 回答
2

我认为您的字节数组逻辑有问题。

你有byte[] t_str = new byte[4];一个 4 字节数组。

但是,您t_str多次分配,覆盖原来的 4 个字节。

您可能正在寻找如下声明:

byte[][] t_str = new byte[4][];

这将是一个数组数组。

在你的循环中:

t_str[i] = Encoding.UTF8.GetBytes(bufstring);

编辑:

或者,如果我离题了,你可以这样做:

Response1Box = buffer[0].ToString("X2");
Response2Box = buffer[1].ToString("X2");
Response3Box = buffer[2].ToString("X2");
Response4Box = buffer[3].ToString("X2");

假设这buffer是一个字节数组,并且您想写出每个单独的字节值

于 2012-10-26T15:04:42.050 回答
0

这是您在 C# 中可能需要的所有字符串格式检查这里 我希望您可能需要以下内容

String str = String.Format("Hello {0:0.00} {1:0.00}", 55, 20);
于 2012-10-26T15:19:25.590 回答