目录
一、创作起因
最近使用C#上位机和欧姆NJ系列PLC通讯。进行字符串的读取时,发现PLC端传送的是QWERTY,但是读取上来的字符串显示是“WQREYT”,明显是字的高低字节位置反过来了。
二、解决办法
在网上查资料居然查不到字符串字节的高低交换。可能是这个问题太简单了,所以没人关心。
由于欧姆龙通讯库使用的是网上找到库文件,就没办法在库封装时实现字符串格式的转换,便决定自己写一个。
三、库文件实现
新建解决方案,添加库文件。命名SwapStr。
同时也新建一个项目,命名自定义。
四、库文件编写
库文件中新建两个方法swap变量是string变量,也就是一个需要转换的字符串。另一个方法IsOdd,这个方法可以定义为内部或者公用。
实现的逻辑是把字符串转换成byte[]数组,然后再把集合数组中的变量12,34,56....两两进行交换。最后再进行拼接,转换成字符串。
但是字节个数为奇数时会报错,所以进行了一个判断,当字节个数是奇数,在最后一个字符的前边插入一个空格“ ”,这样当字节高低进行交换,最后一个字节就是空格。也可以使用Trim()方法把空格删除。我这里偷懒了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SWAP
{
public class SwapStr
{
public string swap(string inString)
{
string originalString = inString;
string abc = null;
int length = originalString.Length;
StringBuilder sb = new StringBuilder();
sb.Append(originalString);
abc = sb.ToString();
if (IsOdd(originalString.Length))
{
length = originalString.Length + 1;
sb.Insert(originalString.Length - 1, " ");
abc = sb.ToString();
}
byte[] byteArray = Encoding.Default.GetBytes(abc);
// 高低字节交换
for (int i = 0; i < length; i += 2)
{
byte temp = byteArray[i];
byteArray[i] = byteArray[i + 1];
byteArray[i + 1] = temp;
}
string swappedString = Encoding.Default.GetString(byteArray);
return swappedString;
}
public static bool IsOdd(int n)
{
return (n % 2 == 1) ? true : false;
}
}
}
五、库文件的使用
引用库文件。
编写代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SWAP;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
string originalString = "BADCE";
string swappedString = null;
SwapStr objSwap = new SwapStr();
swappedString = objSwap.swap(originalString);
Console.WriteLine(swappedString);
Console.Read();
}
}
}
六、运行结果
输入字符串“BADCE”
输入字符串“BADCFE”