1
0

More than 1 year has passed since last update.

ChatGPTにC#で16進文字列→ASCIIコード変換するプログラムを書いてもらってみた

Last updated at Posted at 2023-02-18

凄すぎて引いた。。SFの世界にいるような感覚になります。
部品的なプログラムはノーコードで作れちゃいますね。

章タイトルはChatGPTに入力したテキストです。
※実際には説明もついてきましたが、ここでは省略します。

C#で16進数の文字列をASCIIコードに変換してコンソールに出力するプログラムを書いてください。

using System;

class Program {
    static void Main(string[] args) {
        string hexString = "616263"; // 16進数の文字列
        string asciiString = HexToString(hexString); // 16進数の文字列をASCII文字列に変換
        Console.WriteLine(asciiString); // コンソールに出力
    }

    // 16進数の文字列をASCII文字列に変換するメソッド
    static string HexToString(string hex) {
        string ascii = "";
        for (int i = 0; i < hex.Length; i += 2) {
            string hexChar = hex.Substring(i, 2); // 2文字ずつ16進数の文字列を取得
            int asciiCode = Convert.ToInt32(hexChar, 16); // 16進数の文字列を整数に変換
            char asciiChar = (char)asciiCode; // 整数をASCII文字に変換
            ascii += asciiChar.ToString(); // ASCII文字を文字列に追加
        }
        return ascii;
    }
}

StringBuilderクラスを使って書き直してください。

using System;
using System.Text;

class Program {
    static void Main(string[] args) {
        string hexString = "616263"; // 16進数の文字列
        string asciiString = HexToString(hexString); // 16進数の文字列をASCII文字列に変換
        Console.WriteLine(asciiString); // コンソールに出力
    }

    // 16進数の文字列をASCII文字列に変換するメソッド
    static string HexToString(string hex) {
        StringBuilder asciiBuilder = new StringBuilder();
        for (int i = 0; i < hex.Length; i += 2) {
            string hexChar = hex.Substring(i, 2); // 2文字ずつ16進数の文字列を取得
            int asciiCode = Convert.ToInt32(hexChar, 16); // 16進数の文字列を整数に変換
            char asciiChar = (char)asciiCode; // 整数をASCII文字に変換
            asciiBuilder.Append(asciiChar); // ASCII文字をStringBuilderに追加
        }
        return asciiBuilder.ToString();
    }
}

入力文字列が16進数文字列ではなかった場合にエラーメッセージを出力するように修正してください。


using System;
using System.Text;

class Program {
    static void Main(string[] args) {
        string hexString = "616263"; // 16進数の文字列
        string asciiString = HexToString(hexString); // 16進数の文字列をASCII文字列に変換
        Console.WriteLine(asciiString); // コンソールに出力

        hexString = "zzzz"; // 不正な16進数の文字列
        try {
            asciiString = HexToString(hexString); // 16進数の文字列をASCII文字列に変換
            Console.WriteLine(asciiString);
        }
        catch (ArgumentException ex) {
            Console.WriteLine(ex.Message); // エラーメッセージを出力
        }
    }

    // 16進数の文字列をASCII文字列に変換するメソッド
    static string HexToString(string hex) {
        if (hex.Length % 2 != 0) {
            throw new ArgumentException("16進数の文字列の長さが奇数です。"); // エラーメッセージを出力して例外をスロー
        }
        StringBuilder asciiBuilder = new StringBuilder();
        for (int i = 0; i < hex.Length; i += 2) {
            string hexChar = hex.Substring(i, 2); // 2文字ずつ16進数の文字列を取得
            int asciiCode;
            if (!int.TryParse(hexChar, System.Globalization.NumberStyles.HexNumber, null, out asciiCode)) {
                throw new ArgumentException("16進数の文字列ではありません。"); // エラーメッセージを出力して例外をスロー
            }
            char asciiChar = (char)asciiCode; // 整数をASCII文字に変換
            asciiBuilder.Append(asciiChar); // ASCII文字をStringBuilderに追加
        }
        return asciiBuilder.ToString();
    }
}

以上のやりとりをQiitaの記事にしたいです。問題はありますか?問題ない場合は記事を作成してください。

問題はありません。以下にQiitaの記事を作成します。ご確認いただければと思います。

※さすがに記事事態をそのままコピペするのは気が引けたので停止して自分で書きました。

以下、追記

今回は正しいコードが生成できてそうですが、結構平気で間違った回答を出してくることがあるので、コードチェックしたりテストは必須。
※今回とは別で複素ガンマ関数をライブラリ使わずに計算するプログラムをJavaScriptで書かせてみたところ、異常にシンプルな計算式がでてきたので、怪しいと思い、「検算して」とチャットしても、別のプログラムの実行結果同士を出力して嘘の検算結果を返してきました。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0