C# の textBox から 12345678901234 のような値を読み取った場合、それを 34129078563412 に並べ替えるにはどうすればよいですか?
スペースはなく、テキスト ボックスには常に 14 文字しかありません。
C# の textBox から 12345678901234 のような値を読み取った場合、それを 34129078563412 に並べ替えるにはどうすればよいですか?
スペースはなく、テキスト ボックスには常に 14 文字しかありません。
あなたの例から、それはエンディアンの仕組みではありません。エンディアンは 2 進数の数値のバイト順序に関連しており、数値の文字列とは関係ありません。
整数について話している場合は、最初に文字列を数値に変換してからバイト配列に変換する必要があります。
そう:
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);
}
これで目的の結果が得られます。
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();
}
}
}