FName::GetPlainANSIString()で正しい文字列が取れない事がある

お急ぎのあなたのために、まずは結論。FNameが保持する文字列が必要な時はToString()で生成したFStringを使うべし。GetPlainANSIString()GetPlainWIDEString()を使うとハマるから止めといた方がいい。

Unreal Engine 4の軽量文字列クラスFName公式リファレンス)のGetPlainANSIString関数/GetPlainWIDEString関数で取得できる文字列ポインタには、そのFNameインスタンスが本来持っている文字列の一部しか入っていない事がある。恐らく仕様。以下が実証コード。

TArray<FName> Names;
Names.Add(FName(TEXT("Hoge_")));
Names.Add(FName(TEXT("Hoge_0000")));
Names.Add(FName(TEXT("Hoge_0001")));
Names.Add(FName(TEXT("Hoge_10")));
Names.Add(FName(TEXT("Hoge_1200")));
Names.Add(FName(TEXT("Hoge_1300")));
Names.Add(FName(TEXT("Hoge_9999")));
Names.Add(FName(TEXT("Hoge9999")));
 
for (const auto& Name : Names)
{
	UE_LOG(LogWindows, Log, TEXT("◆%s"), *Name.ToString());
	UE_LOG(LogWindows, Log, TEXT("  PlainAnsiString=%s (%p)"), *FString(Name.GetPlainANSIString()), Name.GetPlainANSIString());
	UE_LOG(LogWindows, Log, TEXT("  [FNameEntry]"));
	UE_LOG(LogWindows, Log, TEXT("    ComparisonIndex=%d"), Name.GetComparisonIndex());
	UE_LOG(LogWindows, Log, TEXT("      [ComparisonEntry]"));
	UE_LOG(LogWindows, Log, TEXT("        Address=%p"), Name.GetComparisonNameEntry());
	UE_LOG(LogWindows, Log, TEXT("        isWide=%d"), Name.GetComparisonNameEntry()->IsWide());
	UE_LOG(LogWindows, Log, TEXT("    DisplayIndex=%d"), Name.GetDisplayIndex());
	UE_LOG(LogWindows, Log, TEXT("      [DisplayEntry]"));
	UE_LOG(LogWindows, Log, TEXT("        Address=%p"), Name.GetDisplayNameEntry());
	UE_LOG(LogWindows, Log, TEXT("        isWide=%d"), Name.GetDisplayNameEntry()->IsWide());
	UE_LOG(LogWindows, Log, TEXT("    Number=%d"), Name.GetNumber());
}

実行結果を見ると、Hoge_10, Hoge_1200, Hoge_1300, Hoge_999で見事に同一のPlainAnsiStringが返ってきているのが分かる(★の部分)

LogWindows: ◆Hoge_
LogWindows:   PlainAnsiString=Hoge_ (000000021299B988)
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029720
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B978
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029720
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B978
LogWindows:         isWide=0
LogWindows:     Number=0
LogWindows: ◆Hoge_0000
LogWindows:   PlainAnsiString=Hoge_0000 (000000021299B9A0)
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029721
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B990
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029721
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B990
LogWindows:         isWide=0
LogWindows:     Number=0
LogWindows: ◆Hoge_0001
LogWindows:   PlainAnsiString=Hoge_0001 (000000021299B9C0)
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029722
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B9B0
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029722
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B9B0
LogWindows:         isWide=0
LogWindows:     Number=0
LogWindows: ◆Hoge_10
LogWindows:   PlainAnsiString=Hoge (000000021299B9E0)…★
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029723
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029723
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     Number=11
LogWindows: ◆Hoge_1200
LogWindows:   PlainAnsiString=Hoge (000000021299B9E0)…★
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029723
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029723
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     Number=1201
LogWindows: ◆Hoge_1300
LogWindows:   PlainAnsiString=Hoge (000000021299B9E0)…★
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029723
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029723
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     Number=1301
LogWindows: ◆Hoge_9999
LogWindows:   PlainAnsiString=Hoge (000000021299B9E0)…★
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029723
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029723
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B9D0
LogWindows:         isWide=0
LogWindows:     Number=10000
LogWindows: ◆Hoge9999
LogWindows:   PlainAnsiString=Hoge9999 (000000021299B9F8)
LogWindows:   [FNameEntry]
LogWindows:     ComparisonIndex=1029724
LogWindows:       [ComparisonEntry]
LogWindows:         Address=000000021299B9E8
LogWindows:         isWide=0
LogWindows:     DisplayIndex=1029724
LogWindows:       [DisplayEntry]
LogWindows:         Address=000000021299B9E8
LogWindows:         isWide=0
LogWindows:     Number=0

FNameはハッシュ付き文字列として実装されている。文字列はFNameの共用領域に格納され、各FNameインスタンスはその文字列格納領域へのインデックス=ハッシュを保持してる。FNameの同士の比較は互いのハッシュの比較、つまり整数の比較に還元されるため、通常の文字列比較より速いって仕掛けなんですな。

ただ、このハッシュ生成方法がちょっと曲者で、文字列がアンダースコア+ゼロ詰めされていない数値で終わっていたら、その部分を除いた文字列を共用領域に格納し、数値は各FNameインスタンスで保持するという方法なのだ。割と最近のバージョンアンプで変わったらしい(知人曰く4.12あたりで変わった気がすると)。なかなか破壊的な変更をしてくださりやがるな!言葉だと分かりにくいので図を作ってみた。

図を踏まえつつ改めて実行結果を見てみると、条件に合致するHoge_10, Hoge_1200, Hoge_1300, Hoge_999の中身が、その通りになっている事がお分かりいただけよう。Numberが実際の数値+1されているのは、これまた仕様で、数値分割条件を満たさないFNameインスタンス(Number == 0)との区別の為っぽい。

UE4では生成されたオブジェクトのインスタンスに対し、オブジェクト名+連番の名前を自動付与するため、大規模な開発になるとFName文字列ストアの肥大化が無視できなくなり、保持方法を変更したのだと思われる。

こんな格納の仕方で大丈夫なの!?と思うが、ふつーにFNameを使う分には何の問題もない。や、正確には大丈夫じゃなかったからこの記事書いてる訳だけど、文字列の生ポインタ取ってこねくり回すような事をしなければ大丈夫。FName文字列に対して低レベルな操作を行いたい時は、ToString()関数で生成したFStringに対して行う事をオススメする。エンジンのコードを見てもらうと分かるが、ComparisonIndexの文字列にアンダースコアと数値をくっつけて元の文字列を復元してやがるので(笑)

ちなみに、実行結果内のDisplayIndexというのは、名前の通り表示用の文字列へのインデックス。簡単に言えば、FName生成時に与えられた文字列のインデックスである。FNameは基本的にcase-preserving(内部的には大文字小文字を区別するが対外的には区別せずに扱う)なので、比較用と表示用で別々の文字列を持つ必要がある訳だ。知らずに使ってると、これも地味にハマりポイントかも。

FName abc(TEXT("abc"));
FName ABC(TEXT("ABC"));
UE_LOG(LogWindows, Log, TEXT("%s %s %s"), *abc.ToString(), (abc == ABC ? TEXT("==") : TEXT("!=")), *ABC.ToString());

念のため上記コードで確認したら、LogWindows: abc == ABCとなった。

掘ってみるとFNameには結構罠があるので注意が必要だ。

see here https://web-jaxxliberty.com/

1 | | 2025-08-11 08:21 | reply

What Sets handofgod.tech Apart HOG Based Yield Stake HOG earn GHOG and monitor price through the dashboard Sanctum and Garden Each realm offers unique pool rewards and supply multipliers AI Powered Use Hog OS and AI agent tools to guide portfolio strategy Liquidity Pools Participate in Hand of God DeFi with stablecoin farming and lock unlock support Stake with divine logic at https://handofgod.tech

2 |
RobertWef
| 2025-08-14 16:49 | reply

click to find out more https://astrol.pro/

3 | | 2025-08-17 09:04 | reply

why not look here https://extended-exchange.cc/

4 | | 2025-08-18 23:54 | reply

Envio mis saludos a todos los cazadores de premios! Muchos jugadores eligen casinos sin licencia en espana porque ofrece mГЎs libertad y anonimato que los sitios regulados. La seguridad de casinos sin licencia en espana se basa en encriptaciГіn avanzada y protocolos internacionales. <a href=п»їhttps://casinosonlinesinlicencia.xyz/></a> Con casinos sin licencia en espana puedes encontrar tragaperras exclusivas y juegos de casino en vivo sin trabas. Una de las ventajas de casinos sin licencia espaГ±a es que puedes registrarte rГЎpido sin verificaciones extensas. La seguridad de casinos sin licencia espaГ±a se basa en encriptaciГіn avanzada y protocolos internacionales. ВїQuieres apostar sin lГ­mites? casinos sin licencia espaГ±a te permite jugar con depГіsitos y retiros flexibles. Casinosonlinesinlicencia: juega desde tu mГіvil - http://casinosonlinesinlicencia.xyz/# Que disfrutes de increibles victorias ! casinos sin licencia en espaГ±a

5 | | 2025-08-26 11:54 | reply

¡Mis más cordiales saludos a todos los visitantes habituales del casino ! La diferencia de casinos sin licencia espaГ±ola estГЎ en que no tienes que esperar, solo juegas y disfrutas. <a href=п»їhttps://casinossinlicencia.xyz/></a> Nada se compara con la intensidad de casinos sin licencia espaГ±ola, donde las reglas son mГЎs flexibles. Cada dГ­a mГЎs personas confГ­an en casinos sin licencia espaГ±ola para disfrutar de apuestas rГЎpidas y seguras. La experiencia de jugar en mejores casinos sin licencia en espaГ±a es Гєnica, llena de adrenalina y sin restricciones molestas. ВїQuieres anonimato y emociГіn al mismo tiempo? mejores casinos sin licencia en espaГ±a lo hace posible sin complicaciones. Los apostadores expertos saben que mejores casinos sin licencia en espaГ±a ofrece cuotas mejores que los regulados. Vive la emociГіn en casinos sin licencia espaГ±a sin lГ­mites ni front… - https://casinossinlicencia.xyz/# ¡Que aproveches magníficas premios !

6 | | 2025-08-28 03:37 | reply

navigate to this site https://toast-wallet.io

7 | | 2025-09-09 12:38 | reply

содержание https://kra41at.at

8 | | 2025-09-28 07:51 | reply

Узнать больше https://kra41a.at

9 | | 2025-09-28 07:51 | reply

?Brindemos por cada buscador de emociones fuertes ! La comunidad destaca que MostBet casino mantiene cuotas competitivas en distintos deportes. <a href=http://estetiplan.es></a> Sus herramientas facilitan analizar estadГ­sticas antes de apostar. Esto ayuda a tomar decisiones mГЎs seguras. Muchos jugadores consideran que https://www.estetiplan.es ofrece una experiencia fluida para apostar sin complicaciones. Su diseГ±o intuitivo permite adaptarse rГЎpidamente incluso a quienes son nuevos. AdemГЎs, la variedad de opciones hace que cada sesiГіn sea distinta. Novedades destacadas dentro de https://estetiplan.es/ - https://www.estetiplan.es ?Que la suerte te sonria con que obtengas espectaculares jackpots esplendidos !

11 | | 2025-12-05 03:50 | reply

?Celebremos a cada hallador de caudales ! Jugar en casinoretirosinverificacion permite acceder a una experiencia rГЎpida y privada sin procesos complicados. <a href=http://casinoretirosinverificacion.com/#></a> Muchos jugadores optan por estas opciones debido a la libertad que ofrecen plataformas como casino sin kyc. Gracias a esta flexibilidad, cada sesiГіn se vuelve mГЎs cГіmoda al usar servicios como casino crypto sin kyc. Jugar en casinos sin verificacion permite acceder a una experiencia rГЎpida y privada sin procesos complicados. Muchos jugadores optan por estas opciones debido a la libertad que ofrecen plataformas como https://casinoretirosinverificacion.com/. Gracias a esta flexibilidad, cada sesiГіn se vuelve mГЎs cГіmoda al usar servicios como casinos sin kyc. Casinos sin kyc, apuesta sin complicaciones - http://casinoretirosinverificacion.com/# ?Que la suerte te beneficie con aguardandote magnificos movidas triunfantes !

12 | | 2025-12-05 08:52 | reply

?Levantemos nuestras copas por cada aspirante al exito ! http://playasegura.org/ playasegura.org publica consejos para apostar responsablemente. Advierte sobre riesgos y cГіmo evitarlos. Es un recurso equilibrado para nuevos jugadores. Casas de apuestas sin licencia espaГ±ola con registro instantГЎneo - https://playasegura.org/# ?Que la fortuna te acompane con que logres extraordinarios conquistas singulares !

13 | | 2025-12-06 03:52 | reply

?Levantemos nuestras copas por cada cazador de emociones intensas ! http://playasegura.org/ casas de apuestas sin licencia permiten explorar cuotas mГЎs elevadas en deportes internacionales. Ofrecen bonos mГЎs frecuentes y promociones constantes. Son ideales para quienes buscan experiencias rГЎpidas y sin verificaciones. lista de casinos seguros desde EspaГ±a - https://playasegura.org/# ?Que la fortuna te acompane con que goces increibles apuestas victoriosas !

14 | | 2025-12-07 00:26 | reply

?Brindemos por cada aventurero de riquezas ! Muchos usuarios buscan alternativas modernas como casinos bono por registro sin deposito para jugar sin complicaciones y con acceso rГЎpido. <a href=“http://feriafranquiciasperu.com/” rel=“nofollow ugc”>casinos online sin registro</a> Las plataformas que mencionan casinos bono por registro sin deposito suelen ofrecer procesos simples que permiten concentrarse en la experiencia. Gracias a estas opciones, cada vez mГЎs jugadores disfrutan de servicios flexibles y entornos cГіmodos sin restricciones. Este sitio relacionado con http://feriafranquiciasperu.com/ ofrece opciones interesantes para los usuarios que buscan comodidad. Muchas personas valoran la rapidez al acceder a servicios vinculados con http://feriafranquiciasperu.com/ sin trГЎmites complicados. La experiencia mejora cuando las plataformas que mencionan http://feriafranquiciasperu.com/ permiten navegar con libertad. Explora hoy mismo casinos sin registro espaГ±a - https://feriafranquiciasperu.com/ ?Que la fortuna te sonria con aguardandote esplendidos beneficios sorprendentes !

15 | | 2025-12-08 23:57 | reply

?Brindemos por cada aventurero de riquezas ! Muchos usuarios buscan alternativas modernas como feriafranquiciasperu.com para jugar sin complicaciones y con acceso rГЎpido. <a href=“http://feriafranquiciasperu.com/” rel=“nofollow ugc”>casinos online sin registro</a> Las plataformas que mencionan feriafranquiciasperu.com suelen ofrecer procesos simples que permiten concentrarse en la experiencia. Gracias a estas opciones, cada vez mГЎs jugadores disfrutan de servicios flexibles y entornos cГіmodos sin restricciones. Este sitio relacionado con https://feriafranquiciasperu.com/# ofrece opciones interesantes para los usuarios que buscan comodidad. Muchas personas valoran la rapidez al acceder a servicios vinculados con https://feriafranquiciasperu.com/# sin trГЎmites complicados. La experiencia mejora cuando las plataformas que mencionan https://feriafranquiciasperu.com/# permiten navegar con libertad. Recomendaciones autГ©nticas sobre casinos online sin registro - https://feriafranquiciasperu.com/ ?Que la fortuna te sonria con compartiendo inolvidables triunfos !

16 | | 2025-12-10 02:38 | reply

?Levantemos nuestras copas por cada estratega del juego ! Algunos jugadores recurren a casinos fuera de espaГ±a para disfrutar de opciones exclusivas. <a href=http://bodegaslasangrederonda.es/en/#></a> Ofrecen un entorno sin lГ­mites estrictos y con mГЎs flexibilidad operativa. Por lo tanto casinos fuera de espaГ±a continГєa expandiГ©ndose dentro del mercado global. Quienes valoran la privacidad suelen optar por casinosonlinefueradeespana como alternativa segura. Brindan acceso a promociones variables y a juegos exclusivos del mercado internacional. Por ello casinosonlinefueradeespana se ha convertido en una elecciГіn atractiva para quienes buscan mГЎs libertad. casinos fuera de espana: Todo lo que debes saber sobre casinos fuera de espana - п»їhttps://bodegaslasangrederonda.es/en/ ?Que la fortuna te acompane con celebraciones memorables giros de suerte !

17 | | 2025-12-12 02:41 | reply

?Brindemos por cada escultor del manana! La elecciГіn de clinicadentalcorralyvargas. <a href=“https://clinicadentalcorralyvargas.com/” rel=“nofollow ugc”>casas de apuestas sin dni</a>. com se vuelve ideal para quienes desean evitar formularios extensos al registrarse. Con un simple correo electrГіnico es posible comenzar a jugar. La comodidad de este proceso es una de las razones de su creciente popularidad. Al explorar clinicadentalcorralyvargas.com, muchos jugadores descubren opciones mГЎs flexibles y cГіmodas que las alternativas tradicionales. La simplicidad del registro permite empezar a apostar en cuestiГіn de segundos. Esto convierte a estas plataformas en una elecciГіn popular entre quienes priorizan privacidad. Descubre beneficios ocultos de https://clinicadentalcorralyvargas.com/ - https://www.clinicadentalcorralyvargas.com/ ?Que la fortuna te sonria con compartiendo memorables jugadas afortunadas !

18 | | 2025-12-12 07:22 | reply

?Levantemos nuestras copas por cada simbolo de la suerte ! Muchos jugadores buscan casinos online fuera de espana para acceder a experiencias mГЎs libres y variadas. <a href=“https://bodegaslasangrederonda.es/en/” rel=“nofollow ugc”>casino fuera de espaГ±a</a> Ofrecen un entorno sin lГ­mites estrictos y con mГЎs flexibilidad operativa. En consecuencia casinos online fuera de espana se vuelve una opciГіn preferida entre jugadores experimentados. La comunidad de apostadores destaca casino fuera de espaГ±a por su oferta global. Garantizan una experiencia continua sin restricciones ni interrupciones. De este modo casino fuera de espaГ±a se posiciona como una alternativa rentable y conveniente. casinos online fuera de espana: Casinos online fuera de espana actualizan promociones a diario - п»їhttps://bodegaslasangrederonda.es/en/ ?Que la fortuna te acompane con momentos increibles triunfos inolvidables!

19 | | 2025-12-12 21:31 | reply

?Brindemos por cada ganador del gran bote ! Los apostadores con experiencia valoran http://www. <a href=https://www.clinicadentalcorralyvargas.com/></a>. clinicadentalcorralyvargas. com/ por sus cuotas dinГЎmicas y promociones constantes. Este tipo de plataformas suele ofrecer oportunidades atractivas que no se encuentran en sitios tradicionales. La rapidez del proceso mejora la experiencia global. El acceso a http://www.clinicadentalcorralyvargas.com/ permite a los usuarios apostar con mayor libertad y sin restricciones innecesarias. Esta ausencia de barreras documentales es clave para quienes quieren comenzar rГЎpido. AdemГЎs, las interfaces modernas facilitan la navegaciГіn. Por quГ© tantos jugadores confГ­an en mejores casas de apuestas sin dni - https://clinicadentalcorralyvargas.com/# ?Que la fortuna te sonria con alcanzando notables botes extraordinarios!

20 | | 2025-12-13 07:51 | reply

?Alcemos nuestros brindis por cada viajero del porvenir ! Los jugadores mГЎs activos suelen elegir casinos sin licencia en espana por su enfoque internacional. <a href=“http://casinosinrestricciones.com/” rel=“nofollow ugc”>casinos online sin licencia</a> No existen bloqueos geogrГЎficos. La experiencia es continua. En foros especializados se habla mucho de casino sin licencia espaГ±ola gracias a su catГЎlogo internacional de juegos. Estas plataformas permiten acceder a funciones exclusivas que no siempre estГЎn disponibles en operadores regulados. Estas ventajas marcan una diferencia clara. Casinos sin licencia EspaГ±a con tragaperras exclusivas - п»їhttps://casinosinrestricciones.com/ ?Que la suerte camine a tu lado con obsequios vibrantes del destino conquistas singulares !

21 | | 2025-12-16 08:38 | reply

?Alcemos nuestros brindis por cada cazador de emociones intensas ! En foros especializados se habla mucho de casino online sin licencia espaГ±a. <a href=“http://casinosinrestricciones.com/” rel=“nofollow ugc”>casinos online sin licencia</a> Los usuarios destacan la rapidez de retiro. Esta ventaja marca la diferencia. Entre las alternativas mГЎs buscadas estГЎn casinos no regulados al facilitar una experiencia mГЎs directa. Estas plataformas permiten acceder a funciones exclusivas que no siempre estГЎn disponibles en operadores regulados. Todo ello genera mayor interГ©s en estas plataformas. Casino online sin licencia EspaГ±a con slots progresivas - https://casinosinrestricciones.com/# ?Que la suerte camine a tu lado con obsequios vibrantes del destino triunfos legendarios!

22 | | 2025-12-17 03:48 | reply



  • blog/2017/2017-01-20.1484979746.txt.gz
  • 最終更新: 2017-01-21 15:22
  • by Decomo