2013年2月8日金曜日

Wii VC brlyt編集用ツール?

VCのbrlytをbenzinでxmlytにしてから文字列を変更するのにUnicode(UTF-16)で書かないといけない。

Win標準の文字コード表示ツールで一文字一文字調べながらやるのはメンドイし、ネット見ても変換表や入力して変換できる所はあるけれど、”文字列”を続けて変換できるものが無かった・・・探し方が悪いだけかな?

とにかく不便だったので、自分用に製作。

sttoutf00

↑メインでの使用はコッチ。

sttoutf01

↑オリジナル文字列の確認用に、一応。

たったこれだけでも編集がとっても楽になるw

あ、Lengthも表示できるようにしておくとプチ便利だから追加しておこうかな。

・・・Wii限定ツールではないけれど、多分、brlyt弄る以外に使い道無いよなぁ(^-^;

【追記】

sttoutf03

とりあえずこれはこれで終わり。

(プチ修正+ver.up(笑)

ってことで、突然ですがクラニンポイントをプレゼント。

PICT8110

3DS-とびだせどうぶつの森のシリアルナンバーですw

登録できる人は限定されるかもだけど~

数値はUnicode(UTF-16)に置き換えてあるので、文字列に戻して登録してください。

早い者勝ちです。

20 件のコメント:

trickart さんのコメント...

誰だかわからないけどクラニンポイント解読するの早っ!
アルファベットだけならUTF-8に00つけるだけなんですねぇ。
でもやっぱり「ギーグの逆襲」って入れたいからまじめにUTF-16変換しないといけないですねー。

ぽんRev さんのコメント...

シリアルアップしたのが0時15分ぐらいだったけど・・早かったですね。
実はアップしてから気が付いたのだけど、アルファベット&数字だけならバイナリエディタで打てばすぐわかるんですよね・・・ちょっと失敗(^-^;

来週月曜日にはドラクエのシリアル貰えるはずだから、今度は全角でリベンジプレゼント出しますのでw
・・・アタリつけやすいからちょっとヒネルかな。

ぽんRev さんのコメント...

失礼、UTF-16の大文字でもアルファベット&数字は簡単すぎ(汗
ってことで決めた。
月曜日貰えたら、の話が前提で。
次回ドラクエシリアルは違う変換方法で行きます(笑
今度はちょっと難しい!?
まずノーヒントで出して、様子見てヒント出して行こうかな。

・・・ノーヒントでわかる人いたら凄いかもしれないかも~

ノミッキオ さんのコメント...

頂き~(-^ε^-)v

ちなみに、どう森はやったことありません。
ファンタジーライフに興味にはあるのですが・・
VITAのファンタシーライフでガマンします。

最近、うちの3DSは体験版専用となってます。
アンケートだけでプラチナになれるかな~
2012年度はプラチナだったのだけど・・

昨日、コメントしたつもりだったけど・・
登校拒否しちゃったのかな~
では~。

ありがとうございました(ε^^*)

ぽんRev さんのコメント...

ノミッキオさん

お久しぶり&おめでとうございます(^-^)
次回(?)は難しい(ハズ)ですがお試しを(笑

3DSは私自身全く触っておりませんw

コメントは偶に消滅するようで申し訳ないです・・・
何ででしょうねぇ。


皆さんへ

コメント反映されなかったら2重3重投稿でもいいのでお試しくださいませ~m(_ _)m

でや さんのコメント...

言ってはいけないのかもしれませんが、HEX文字列をTCHARに入れて、WideC●a●ToMultiB●t●で一発じゃ・・・・

でや さんのコメント...

.netならSystem.Text.Encodingで余裕?

ぽんRev さんのコメント...

でやさん

アドバイスありがとうございます(^-^)
えっと、シリアルでは無くてプログラムの方ですよね?
WideCharToMultiByteは知りませんでしたw
これで一発変換なら確かに楽ですね。

>.netならSystem.Text.Encoding
詳しいわけではないのですが、.netは基本Unicode仕様なはずなので、プログラム内ではあえて指定はしてません。
っても、現在はChrWとAscW使って一文字づつ間違いなくUnicode変換できるようになってます。
brlytの場合、全て4Byteでないといけないから"X4"指定が必須なんだけど、WideCharToMultiByteでも・・・当然できるのかな(^-^;

いずれにせよVB.NETもよくわかってないので、ツッコミとかありましたら何なりとお願いしますm(_ _)m

私の頭が付いていけば参考にして使わせていただきますので(^-^;

trickart さんのコメント...

文字コードの問題は難しいですね。
私も最近WiiHomeBrewの日本語化をやったりしていますが文字コード関連でよく躓いています。(^_^;)
アルファベットだけならSJISで読み込んでくれていた設定ファイルが日本語混ぜたらUTF-8じゃないとダメだったり、
ExcelがBOMがついていないcsvはSJISとして読み込んでしまってsysCheckの結果が文字化けしたり…

動画や音楽と違って普段意識しない分余計原因特定に手こずります。
早いところUTF-8に統一してくれないかなー。

ぽんRev さんのコメント...

trickartさん

外国の人も同じなんだろうけど、世界で共通するプログラムを作ろうと思うと結構文字コードって曲者でしょうね。
統一するか、システムが判別できるようにするか・・・
全部半角英数字・・・絶対イヤだ(笑

でや さんのコメント...

WideCharToMultiByteはWin32APIなので、.netでも使用可能ですが、.netなら.netの機能を使う方が良いと思います。
試してみたら、結構簡単でした。Encodingとい

VB.netは手元のマシンに入っていなかったのでVisual C# 2005で。VBも基本同じだと思います。

byte[] byteSrc = Encoding.Unicode.GetBytes("悪魔城ドラキュラX 血の輪廻");
string strHex = BitConverter.ToString(byteSrc);
string strOut = strHex.Replace("-", "");
Console.WriteLine(strOut);

string[] strHexChars = strHex.Split('-');
byte[] byteDec = new byte[strHex.Length];
for (int i = 0; i < strHexChars.Length; i++) {
byteDec[i] = Convert.ToByte(strHexChars[i], 16);
}
string strDec = Encoding.Unicode.GetString(byteDec);
Console.WriteLine(strDec);

追記の画像と比べると、上位と下位が入れ替わってますね・・・どちらが正しいのかは
検証してないです(汗
あと、最後に?でてますし。
ちなみに、最後000a0000って事は改行入ってます???

ぽんRev さんのコメント...

でやさん

お試し&サンプルありがとうです(^-^)
早々vb.netで試してみました。
Dim byteSrc As Byte() = System.Text.Encoding.Unicode.GetBytes("悪魔城ドラキュラX 血の輪廻")
Dim strHex As String = BitConverter.ToString(byteSrc)
Dim strOut As String = strHex.Replace("-", "")
Debug.WriteLine(strOut)
・・・戻しが上手く出力できませんが(汗
Unicode変換だけ見るととてもシンプルですね。

>上位と下位が入れ替わって
文字コード的には逆だからスワップしないといけないかな(^-^;

>最後に?
なぜだろう?
文字変換できてないので確認してませんが・・・

>最後000a0000
スイマセン、コレは私のミスで、文字列コピペした時に改行コード入ってたようです(^-^;
でもVCでLF入り(CR無し)は存在します。

でや さんのコメント...

VB.netならこんな感じで

Module Module1

Sub Main()
Dim byteSrc As Byte() = System.Text.Encoding.Unicode.GetBytes("悪魔城ドラキュラX 血の輪廻")
Dim strHex As String = BitConverter.ToString(byteSrc)
Dim strOut As String = strHex.Replace("-", "")
Console.WriteLine(strOut)

Dim strHexChars As String() = strHex.Split("-")
Dim byteDst As Byte() = New Byte(strHex.Length) {}
Dim i As Integer = 0
For i = 0 To strHexChars.Length - 1
byteDst(i) = Convert.ToByte(strHexChars(i), 16)
Next
Dim strDst As String = System.Text.Encoding.Unicode.GetString(byteDst)
Console.WriteLine(strDst)

End Sub

End Module

でや さんのコメント...

>文字コード的には逆だからスワップしないといけないかな(^-^;

ん?VCでUNICODEがメモリ上にどのように配置されているのか調べてみましたが、
"悪魔城~"は aa 60 54 9b ce 57......と配置されます。

ですので、このUNICODE文字列をdumpするのであれば、上記の通りでないと駄目です。
最初に示したC#やVBのコードでもbyteSrcにはその様に配置されています。

ぽんRev さんのコメント...

でやさん

vb.netのサンプルありがとうです(^-^)
今試したらどちらもできました。

で、
>UNICODEがメモリ上にどのように配置されているのか
Win標準の文字コード表やネットで参照できる表、それとVCのはビッグエンディアンで、今回のサンプルではリトルエンディアン処理されてるって事ですかね。

なので、VCで使うのであればスワップは必要かな、と。

でや さんのコメント...

あ、そうか!私が完全に勘違いしてました。確かに文字コード表をみると、悪は60AAですね。
それが、INTEL CPUなんだからメモリに配置されるときは、byte swapされて当然か。
てっきり、UNICODEをそのままダンプしてるもんだと・・・。
なにわともあれ、C#もVBもバイト配列のところswapさせるだけなんで、余裕ですね。

ぽんRev さんのコメント...

でやさん

WideCharToMultiByteもBitConverterも、.netでは基本的にリトルエンディアン処理みたいですね。

文字列を沢山扱う場合は便利なので、このコードはありがたく使わせていただきますね(^-^)

匿名 さんのコメント...

最近vcの改造を始めたのですが、どうしてもvcbrlyt.exeやvc_save_inject.exeが動作せず困り果てていた所で、このサイトにたどり着いたのですが、教えて欲しいことがあります。

Cygwinをインストールしましたが、その後が分かりません。コマンドプロトの知識も乏しいため、それ以上進めることが出来ませんでした。
どうすれば、環境を整えてvcbrlyt.exe等がちゃんと動作するのでしょうか?
手順を教えてくれたら幸いです。

ぽんRev さんのコメント...

匿名さん

>vcbrlyt.exeやvc_save_inject.exeが動作せず
これは、私も正常に使えなかった気がしますw
少なくともSFCに関してはこれらは必要ないです。
VCはSFC、FC、MD、PCEとビルドの方法が違ってたりする&使用できるベースWADも選ぶ必要がありますね。

>Cygwinをインストール
これはbenzinを使うためにインストしたんですよね?

>環境を整えてvcbrlyt.exe等がちゃんと動作
上で書いたように私も動かせてないので説明できないんですが・・・ん~、SFCだけでよければ、前にやり方殴り書きしておいたメモがあるので、それを元に書けたら書きますね(^-^;
気力次第ということで(汗

匿名 さんのコメント...

返答ありがとうございます。
benzinについてはwindous用に作られたものがあったので解決出来そうです。

やはり動かせないのですか・・・。
わざわざ変換したりせずに細かく編集出来るものだからとても便利そうだったのですがね。
VBアプリケーションは良く分かりませんね。

自作ツール凄いですね・・・