在C#中未能使用String.Format

时间:2012-10-26 14:54:18

标签: c# c++ .net wpf string

我是一名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));
}

其中buffer[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]是byte []。

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

请帮助:)

3 个答案:

答案 0 :(得分: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]);

请参阅Composite FormattingStandard Numeric Format strings

当然,在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];
.......

答案 1 :(得分: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是一个字节数组,并且你想写出每个单独的字节值

答案 2 :(得分:0)

以下是C#Check Here中可能需要的所有字符串格式 我希望您可能需要以下内容

String str = String.Format("Hello {0:0.00} {1:0.00}", 55, 20);