アプリ版:「スタンプのみでお礼する」機能のリリースについて

C#初心者です。お願いします。
環境Windows11
VisualStudio2019

フォームアプリケーション(.NetFramework)
で作成しています。

1 フォーム起動後テキストボックス1に入力値を入力
2 テキストボックスの内容をバイト配列に格納
3 ボタン2で行列演算
4 テキストボックス2に表示したいと思ってます。
現在試行錯誤中ですがよくわかっていませんのでよろしくお願いします。

入力値0011223344556677
private void button1_Click(object sender, EventArgs e)
{

   2文字ずつ取ってきて配列にいれるのがわかりません

}
private void button2_Click(object sender, EventArgs e)
{
//行列計算
   
使用行列関数(AES-Mix)

private byte[,] MixColumns(byte[,] s)
{
for (var c = 0; c < _Ws; c++)
{
var a = new byte[_Ws];
var b = new byte[_Ws];
for (var i = 0; i < _Ws; i++)
{
a[i] = s[i,c];
b[i] = (byte)(s[i,c] & 0x80) != 0 ? (byte)((s[i,c] << 1) ^ 0x011b) : (byte)(s[i,c] << 1);

}
// a[n] ^ b[n] is a•{03} in GF(2^8)
s[0,c] = (byte) (b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]); // 2*a0 + 3*a1 + a2 + a3
s[1,c] = (byte) (a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]); // a0 * 2*a1 + 3*a2 + a3
s[2,c] = (byte) (a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]); // a0 + a1 + 2*a2 + 3*a3
s[3,c] = (byte) (a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]); // 3*a0 + a1 + a2 + 2*a3
}
return s;
}


byte[] data;
data = new byte[8];
string str = "";
for (int i = 0; i < data.Length; i++)
{
str += string.Format("{0:X2}", data[i]);
}

textBox2.Text = str;
}

A 回答 (4件)

TextBoxに想定どおりの文字列が入っていることが前提で…



https://dobon.net/vb/dotnet/string/substring.html
substring()で切り出しできます。

https://dobon.net/vb/dotnet/programing/convert.h …
Parse()で数値化できます。

for (i = 0;i < (TextBox1.TextLength / 2); i++)
{
 NumArray[i] = int.Parse(TextBox1.Text.substring((i * 2), 2));
}
みたいな感じになりますかね。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
var NumArray = new int[256];
var NumArray2 = new int[256];
var NumArray3 = new int[256];

for (int i = 0; i < (textBox1.TextLength / 2); i++)
{
NumArray[i] = int.Parse(textBox1.Text.Substring((i * 2), 2));
}
for (int i = 0; i < (textBox1.TextLength / 2); i++)
{
NumArray2[i] = int.Parse(textBox2.Text.Substring((i * 2), 2));
}
for (int j = 0; j < 16; j++)
{
NumArray3[j] = NumArray[j] + NumArray2[j];

}
textBox3.Text = Convert.ToString(NumArray3);

このような感じでたとえば実施するとテキストボックスにSystemInt32[]と表示されてしまうのは入力値が超えているからでしょうか?

お礼日時:2022/07/18 23:02

余談になってしまうのですが


正規表現の確認はさくらエディタの検索オプションに正規表現があるのでそれで確認していただけると更に楽になると思います
    • good
    • 0
この回答へのお礼

さくらエディタサイトは確認しました。Regexが認識しないので、何かがうまくいかないので、はじかれるので試行錯誤してやっていきます。

お礼日時:2022/07/24 01:06

おはようございます


ランダムで来るのはテキストボックスの値ですよね
Regex.Match(テキストボックスの値 , "¥w{2}")とやると
2文字ずつ配列が出来るのです
ブレークポイントで処理を止めて
ウォッチウィンドウに処理結果のオブジェクトを渡してみて貰えれば分かります
言葉足らずですみません
    • good
    • 0
この回答へのお礼

Regex.Match(テキストボックスの値 , "¥w{2}")でとれるんですね。
ありがとうございました

お礼日時:2022/07/22 05:55

おはようございます


.NETはVBの方を使っていたので応用できるか分かりませんが
Regex.Matchというメソッドを使うと良いかも知れません
多分ここまで書けるなら下記の意味も分かると思います

results = Regex.Matches("0011223344556677","\w{2}")
マッチした内容が配列になる感じです
あ、でも文字数が奇数だと最後の1文字が取れないかも
それは工夫してやってみて下さい

https://atmarkit.itmedia.co.jp/ait/articles/1702 …
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
Regex.Matchというメソッド探してみました。
同じ数値があった場合、そこから必要数値をとるということでしょうか
テキストボックスに入れる数値についてはランダㇺなので(ここでは固定値にしてました。すいません)マッチするのをいれるのとは違ってくるので今回は該当しませんが、このような方法もあるということで勉強になります。
ありがとうございました。

お礼日時:2022/07/18 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A