Post by Peter J. HolzerWenn Du zufällig Informatik-Professor bist, kannst das als Praktika
vergeben.
Ich nehme einmal ein Python-Skript (Python ist hier meine
Spezifikationssprache).
|print( "".join( f'{x:X}' for x in "ä".encode( "UTF-8" )))
(Ausgabe: "C3A4" ohne die Anführungszeichen).
Der Chatbot gibt mir Go (kann ich nicht):
package main
import (
"fmt"
"strings"
)
func main() {
s := "ä"
var result strings.Builder
for _, b := range []byte(s) {
fmt.Fprintf(&result, "%X", b)
}
fmt.Println(result.String())
}
Rust (kann ich nicht):
fn main() {
let s = "ä";
let encoded = s.as_bytes();
let hex_string: String = encoded.iter()
.map(|&b| format!("{:X}", b))
.collect();
println!("{}", hex_string);
}
Kotlin (kann ich nicht):
println("ä".toByteArray(Charsets.UTF_8).joinToString("") { "%02X".format(it.toInt() and 0xFF) })
Haskell (kann ich nicht):
import Data.Char (chr, ord)
import Numeric (showHex)
import Data.Text.Encoding (encodeUtf8)
import qualified Data.Text as T
import qualified Data.ByteString as BS
main :: IO ()
main = putStrLn $ concatMap (\x -> showHex x "") $ BS.unpack $ encodeUtf8 $ T.pack "ä"
VB6 (aus dem Betreff!):
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cbMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Const CP_UTF8 As Long = 65001
Sub Main()
Dim s As String
Dim b() As Byte
Dim i As Integer
Dim result As String
s = "ä"
ReDim b(WideCharToMultiByte(CP_UTF8, 0, StrPtr(s), Len(s), 0, 0, 0, 0) - 1)
WideCharToMultiByte CP_UTF8, 0, StrPtr(s), Len(s), VarPtr(b(0)), UBound(b) + 1, 0, 0
For i = 0 To UBound(b)
result = result & Hex$(b(i))
Next i
Debug.Print result
End Sub
C++ (in C++23 werden Strings wohl standardmäßig in UTF-8 abgelegt):
#include <iostream>
#include <iomanip>
#include <string>
int main() {
std::string s = "ä";
for (unsigned char c : s) {
std::cout << std::uppercase << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(c);
}
std::cout << std::endl;
return 0;
}
Und so weiter. Habe ich auch schon mit größeren Skripten gemacht.
Man muß natürlich manchmal noch etwas nachbearbeiten . . .