C# 运算符“+”不能应用于“byte[]”和“int”类型的操作数 我是C++开发者,最近搬到C。现在我在WPF应用程序中处理文本框,在那里我需要设置文本框的测试。代码如下:

C# 运算符“+”不能应用于“byte[]”和“int”类型的操作数 我是C++开发者,最近搬到C。现在我在WPF应用程序中处理文本框,在那里我需要设置文本框的测试。代码如下:,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,XAML: 现在在这个文本框中,我需要设置文本。基本上在我的C++应用程序中,我做了如下: m_matchData11->setText(String(String::toHexString((buffer+0), 1)), false); m_matchData12->setText(String(String::toHexString((buffer+1+4), 1)), false); Data11 = BitConverter.ToString(buffer, 1); Da

XAML:

现在在这个文本框中,我需要设置文本。基本上在我的C++应用程序中,我做了如下:

m_matchData11->setText(String(String::toHexString((buffer+0), 1)), false);
m_matchData12->setText(String(String::toHexString((buffer+1+4), 1)), false);
Data11 = BitConverter.ToString(buffer, 1);
Data12 = BitConverter.ToString((buffer + 4), 1);
如果您注意到上面的内容,ToHexString将创建一个包含二进制数据块的十六进制转储的字符串。我在WPF应用程序中尝试了以下操作:

m_matchData11->setText(String(String::toHexString((buffer+0), 1)), false);
m_matchData12->setText(String(String::toHexString((buffer+1+4), 1)), false);
Data11 = BitConverter.ToString(buffer, 1);
Data12 = BitConverter.ToString((buffer + 4), 1);
虽然第一条语句似乎工作正常,但第二条语句抛出以下错误:

运算符“+”不能应用于“byte[]”和“int”类型的操作数


我怎样才能做到这一点

您可以使用接受起始索引和长度的方法重载

Data12 = BitConverter.ToString(buffer, 4, 1);
这将获得缓冲区中的第5个字节

如果您没有使用BitConverter.ToString并且必须手动操作,那么可以使用Linq的Take和Skip扩展方法

编辑:

如果仅格式化缓冲区的1字节,则可以改为:

Data12 = buffer[4].ToString("X2");

您可以使用接受起始索引和长度的方法的重载

Data12 = BitConverter.ToString(buffer, 4, 1);
这将获得缓冲区中的第5个字节

如果您没有使用BitConverter.ToString并且必须手动操作,那么可以使用Linq的Take和Skip扩展方法

编辑:

如果仅格式化缓冲区的1字节,则可以改为:

Data12 = buffer[4].ToString("X2");

那么,您正在尝试查找字节数组的第4个元素?向我们显示缓冲区的定义。@rbaryyoung看起来错误指向缓冲区是字节[]。表达式buffer+4应该是地址算法吗?如果是这样的话,这就是像c这样的托管代码中的verboten。@digaomatias:是的,我明白了。仍然应该看到实际的定义,这是肯定的,因为它可以更好地解释此处尝试的内容。因此,您正在尝试查找字节数组的第4个元素?向我们显示缓冲区的定义。@rbaryyoung看起来错误指向缓冲区是字节[]表达式缓冲区+4应该是地址算法吗?如果是这样的话,这就是像c这样的托管代码中的verboten。@digaomatias:是的,我明白了。仍然应该看到实际的定义,这是肯定的,因为它可以更好地解释这里尝试的内容。谢谢:下面是toHexStringconst void*数据的格式,int-size,int-groupSize=1。不执行BitConverter.ToStringbuffer,4,1;是否执行相同的操作?:您不需要自己的方法来显示十六进制字符串。我刚刚意识到,您一次只能格式化1个字节,您可以放弃位转换器,只需执行Data12=buffer[4]@Matthew:Data12=BitConverter.ToStringbuffer,4,1;和Data12=缓冲区[4]。ToStringX2;似乎给出了相同的结果hanks:下面是toHexStringconst void*数据的格式,int-size,int-groupSize=1。不执行BitConverter.ToStringbuffer,4,1;是否执行相同的操作?:您不需要自己的方法来显示十六进制字符串。我刚刚意识到,您一次只能格式化1个字节,您可以放弃位转换器,只需执行Data12=buffer[4]@Matthew:Data12=BitConverter.ToStringbuffer,4,1;和Data12=缓冲区[4]。ToStringX2;似乎得出了同样的结果