ど素人です、アドバイスがもらえると助かります
解決したいこと
プログラミング未経験の者ですが
windowsのフリーソフトで使っていたソフトのコードが有りまして
アンドロイド端末で使用したいと思い
まったくの無知なのでchatGPTに質問してKotlinに変換してもらいました
何とか動作するところまでになったのですが
入力した数値に対して出力が同じになりません
c#のコードとchatGPTの出力したコードを比較してアドバイスしていただけると助かります
入力した数値ですが 100110034e601a10 です
windowsソフトの出力は 0A580C60 なのですが
変換して動作しているapkでの出力は 50600002 となります
該当するソースコード
// calculator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// calculator.MainWindow
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Windows;
private void Посчитать(object sender, RoutedEventArgs e)
{
if (ИсходноеЧисло.Text.Count() != 16)
{
MessageBox.Show("Должно быть 16 символов", "Ошибка");
return;
}
bool flag = true;
string text = "AaBbCcDdEeFf1234567890";
string text2 = ИсходноеЧисло.Text;
foreach (char c in text2)
{
string text3 = text;
foreach (char c2 in text3)
{
if (c == c2)
{
flag = false;
}
}
if (flag)
{
MessageBox.Show("Введен неправильный символ", "Ошибка");
return;
}
flag = true;
}
int num = int.Parse(ИсходноеЧисло.Text.Substring(0, 8), NumberStyles.HexNumber);
int num2 = int.Parse(ИсходноеЧисло.Text.Substring(8, 8), NumberStyles.HexNumber);
List<char> list = Convert.ToString(num2, 2).ToList();
list.Reverse();
while (list.Count < 32)
{
list.Add('0');
}
List<char> list2 = Convert.ToString(num, 2).ToList();
list2.Reverse();
while (list2.Count < 32)
{
list2.Add('0');
}
list2.Reverse();
for (int k = 0; k < 32; k++)
{
if (list2[k] == list[k])
{
list2[k] = '0';
}
else
{
list2[k] = '1';
}
}
num = (int)Convert.ToUInt64(new string(list2.ToArray()), 2);
num -= 234949137;
List<char> list3 = Convert.ToString(num, 16).ToList();
list3.Reverse();
while (list3.Count < 8)
{
list3.Add('0');
}
list3.Reverse();
Результат.Text = new string(list3.ToArray()).ToUpper();
}
該当するソースコード
package com.example.calculator
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var inputText: EditText
private lateinit var resultText: TextView
private lateinit var calculateButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
inputText = findViewById(R.id.inputText)
resultText = findViewById(R.id.resultText)
calculateButton = findViewById(R.id.calculateButton)
calculateButton.setOnClickListener { calculate() }
}
private fun calculate() {
val input = inputText.text.toString()
if (input.length != 16) {
Toast.makeText(this, R.string.input_error_length, Toast.LENGTH_SHORT).show()
return
}
val allowedChars = "AaBbCcDdEeFf1234567890"
if (!input.all { it in allowedChars }) {
Toast.makeText(this, R.string.input_error_invalid_character, Toast.LENGTH_SHORT).show()
return
}
try {
val num1 = input.substring(0, 8).toLong(16).toInt()
val num2 = input.substring(8, 16).toLong(16).toInt()
// 32ビットに揃える
val bin2 = num2.toString(2).padStart(32, '0').reversed()
val bin1 = num1.toString(2).padStart(32, '0').reversed()
// ビット演算
val resultBin = bin1.zip(bin2) { b1, b2 -> if (b1 == b2) '0' else '1' }.reversed().joinToString("")
// 結果を符号なし整数として扱う
var resultNum = resultBin.toULong(2).toLong()
resultNum -= 234949137
// 結果を16進数文字列に変換
val resultHex = resultNum.toString(16).padStart(8, '0').uppercase()
resultText.text = resultHex
} catch (e: Exception) {
Toast.makeText(this, R.string.input_error_invalid_character, Toast.LENGTH_SHORT).show()
}
}
}
何卒宜しくお願い致します
1 likes