[UE5]Blueprintでbyte型を文字へ変換
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.cppFString 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を作成後、変換用の関数を実装した例です。
UFUNCTION(BlueprintPure, meta=(DisplayName = "To Char", CompactNodeTitle = "->", BlueprintAutocast))
static FString Conv_ByteToChar(uint8 InByte);
FString AMyActor::Conv_ByteToChar(const uint8 InByte)
{
FString Data;
Data.AppendChar(InByte);
return Data;
}
上記の自作ノードを早速使用してみましょう。
見た目はTo String (Byte)ノードと一緒ですが、中身がちゃんと自作したTo Charノードになっています。
こちらを実行した結果は以下の通りです。
無事、Byte型を文字へ変換できました。
悩んでいた方の参考になれば幸いです。
- 参考
- 公式ドキュメント
- Epic DEV COMMUNITY Formus
Discussion