我在Visual Studio 2010中使用C#。
我想将一个字节(8位int)转换为一个字符长的字符串。我需要这样做,因为我想通过串行将字节值发送到Arduino。
例如,假设
byte myByte = 49;
49是字符“1”的ASCII码。我想将myByte转换为myString,如果我做了
serialport1.Write(myString);
它的功能与
相同serialport1.Write("1");
任何人都可以帮助我吗?
答案 0 :(得分:17)
System.Text.Encoding.ASCII.GetString(new[]{myByte})
答案 1 :(得分:2)
serialport1.Write(Convert.ToChar(myByte).ToString());
答案 2 :(得分:1)
您确定要使用ASCII吗?
如果是这样,您应该保护自己免受不可转换的数据的侵害。一种方法是在数据不是ASCII时抛出异常:
var bytes = new Byte[]{myByte};
var encoding = Encoding.GetEncoding("US-ASCII", new EncoderExceptionFallback(),
new DecoderExceptionFallback());
var myString = encoding.GetString(bytes);
System.Text.Encoding.ASCII
会用?
替换不可转换的数据,这会无声地掩盖问题并产生奇怪的症状。
答案 3 :(得分:1)
如果它可以帮助其他人:我必须在循环中执行类似的操作,并且在生成要打印的结果字符串时遇到问题。答案是使用上面的spender解决方案,但在添加到我的字符串之前将其包装以检查空字节:
string result = "";
foreach (byte myByte in myArray)
{
if (myByte != (byte)00000000)
{
result += System.Text.Encoding.ASCII.GetString(new[]{myByte})
}
}
答案 4 :(得分:1)
一个简单的解决方案是将字节转换为char,然后将其转换为字符串:
public string SingleByteToString(byte ಠ_ಠ)
{
return ((char)(ಠ_ಠ)).ToString();
}
答案 5 :(得分:0)
试试这个:
byte byteVal = 49;
serialport1.Write(System.Convert.ToString(byteValue));