我是一名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);
我哪里错了???
请帮助:)
答案 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 Formatting和Standard 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);