👾

[UE5]Blueprintでbyte型を文字へ変換

2023/04/06に公開

BlueprintのByte型を文字としてFStringに変換をかけた時に若干困ったことがあったので、ブログに残します。

既存のBlueprintでByte型をStringへ変換するには

BlueprintではByte型を文字(FString)として変換するのに、下記のTo String (Byte)ノードを使用します。

To String (Byte)ノードを使用して文字を取得しようとした

文字変換の検証として、FStringから先頭の一文字(この例では『h』)をByte型に変換を掛けた後、To String (Byte)ノードで再度変換をかけ、結果をPrint Stringで画面に表示します。

To String (Byte)ノード実行結果

結果は以下の通りです。期待しているのは『h』の表示ですが...

To String (Byte)ノードの戻り値が文字ではなく数値が表示されています。

原因

To String (Byte)ノードの中身(UKismetStringLibrary::Conv_Int64ToString)を見たところ、FString::Printfでフォーマット指定子『%d』で変換をかけていただけでした。

KismetStringLibrary.cpp
FString UKismetStringLibrary::Conv_ByteToString(uint8 InByte)
{
	return FString::Printf(TEXT("%d"), InByte);	
}

そりゃ数値になるわけですね。

forumでも同様の質問が投稿されており、検索した限りではBlueprintのみの解決策はありませんでした。
There is a bug in UE5 converting from byte to string

解決策(C++で作成してBlueprintに公開する)

というわけで、ue5.0及び5.1では、Byte型を文字に変換するには既存のBlueprintではできないため、c++で変換用の関数を作成してBlueprintへ公開するしかなさそうです。

c++ではFString::AppendCharという便利な変換関数があるので利用します。

下記はMyActor.hを作成後、変換用の関数を実装した例です。

MyActor.h
UFUNCTION(BlueprintPure, meta=(DisplayName = "To Char", CompactNodeTitle = "->", BlueprintAutocast))
static FString Conv_ByteToChar(uint8 InByte);
MyActor.cpp
FString AMyActor::Conv_ByteToChar(const uint8 InByte)
{
	FString Data;
	Data.AppendChar(InByte);
	return Data;
}

上記の自作ノードを早速使用してみましょう。

見た目はTo String (Byte)ノードと一緒ですが、中身がちゃんと自作したTo Charノードになっています。
こちらを実行した結果は以下の通りです。

無事、Byte型を文字へ変換できました。
悩んでいた方の参考になれば幸いです。

Discussion