如果我从 C# 中的文本框中读取 12345678901234 之类的值,如何将其重新排序为 34129078563412?
没有任何空格,文本框总是只有 14 个字符。
如果我从 C# 中的文本框中读取 12345678901234 之类的值,如何将其重新排序为 34129078563412?
没有任何空格,文本框总是只有 14 个字符。
尝试以下操作:
string s = Reorder("12345678901234");//34129078563412
//...
static string Reorder(string s) {
StringBuilder sb = new StringBuilder(s);
for(int i = 0; i < sb.Length / 2; i += 2) {
Reorder(sb, i, (sb.Length - 1) - i - 1);
Reorder(sb, i + 1, (sb.Length - 1) - i);
}
return sb.ToString();
}
static void Reorder(StringBuilder sb, int pos1, int pos2) {
char tmp = sb[pos1];
sb[pos1] = sb[pos2];
sb[pos2] = tmp;
}
好的,这将产生您想要的结果:
using System;
namespace Demo
{
class Program
{
void Run()
{
string input = "12345678901234";
string output = reorder(input);
Console.WriteLine(output);
}
string reorder(string input)
{
var a = input.ToCharArray();
for (int i = 0; i < a.Length/2; i += 2)
{
swap(ref a[i], ref a[a.Length-2-i]);
swap(ref a[i+1], ref a[a.Length-1-i]);
}
return new string(a);
}
void swap(ref char a, ref char b)
{
char t = a;
a = b;
b = t;
}
static void Main()
{
new Program().Run();
}
}
}
从您的示例来看,这不是endian 的工作方式。Endian 与二进制中数字的字节顺序有关,与数字字符串无关。
如果您在谈论整数,那么您需要先将字符串转换为数字,然后再转换为字节数组。
所以:
string text = "12345678901234";
long number = long.Parse(text);
byte[] numberBytes = BitConverter.GetBytes(number);
if (BitConverter.IsLittleEndian) Array.Reverse(numberBytes);
如果你真的想砍掉和改变周围的数字,那么这只是基本的字符串操作,与字节顺序无关。
但是,您可以这样做:
string oldString = "12345678901234";
string newString = string.Empty;
for (int i = oldString.Length - 2; i >= 0; i -= 2)
{
newString += oldString.Substring(i, 2);
}