【C言語】UTF8 <-> SJIS 変換(VisualStudio2017)
何気に解決するまで時間を要したのでメモっておく
結果的に誰かのブログのまるパクリ(どこだったかは忘れました…)
感謝
#include "stdafx.h" #include <Windows.h> #include <string> std::string UTF8toSjis(std::string srcUTF8) { //Unicodeへ変換後の文字列長を得る int lenghtUnicode = MultiByteToWideChar(CP_UTF8, 0, srcUTF8.c_str(), srcUTF8.size() + 1, NULL, 0); //必要な分だけUnicode文字列のバッファを確保 wchar_t* bufUnicode = new wchar_t[lenghtUnicode]; //UTF8からUnicodeへ変換 MultiByteToWideChar(CP_UTF8, 0, srcUTF8.c_str(), srcUTF8.size() + 1, bufUnicode, lenghtUnicode); //ShiftJISへ変換後の文字列長を得る int lengthSJis = WideCharToMultiByte(CP_THREAD_ACP, 0, bufUnicode, -1, NULL, 0, NULL, NULL); //必要な分だけShiftJIS文字列のバッファを確保 char* bufShiftJis = new char[lengthSJis]; //UnicodeからShiftJISへ変換 WideCharToMultiByte(CP_THREAD_ACP, 0, bufUnicode, lenghtUnicode + 1, bufShiftJis, lengthSJis, NULL, NULL); std::string strSJis(bufShiftJis); delete bufUnicode; delete bufShiftJis; return strSJis; } std::string SjistoUTF8(std::string srcSjis) { //Unicodeへ変換後の文字列長を得る int lenghtUnicode = MultiByteToWideChar(CP_THREAD_ACP, 0, srcSjis.c_str(), srcSjis.size() + 1, NULL, 0); //必要な分だけUnicode文字列のバッファを確保 wchar_t* bufUnicode = new wchar_t[lenghtUnicode]; //ShiftJISからUnicodeへ変換 MultiByteToWideChar(CP_THREAD_ACP, 0, srcSjis.c_str(), srcSjis.size() + 1, bufUnicode, lenghtUnicode); //UTF8へ変換後の文字列長を得る int lengthUTF8 = WideCharToMultiByte(CP_UTF8, 0, bufUnicode, -1, NULL, 0, NULL, NULL); //必要な分だけUTF8文字列のバッファを確保 char* bufUTF8 = new char[lengthUTF8]; //UnicodeからUTF8へ変換 WideCharToMultiByte(CP_UTF8, 0, bufUnicode, lenghtUnicode - 1, bufUTF8, lengthUTF8, NULL, NULL); std::string strUTF8(bufUTF8); delete bufUnicode; delete bufUTF8; return strUTF8; }
【PSC】本体へPNGファイルをコピーするシェル(壁紙変更)
※※※ 取扱注意!!! ※※※
※※※ 使用方法によっては文鎮化の危険性あり ※※※
※※※ 事前に必ずバックアップをとってください ※※※
※※※ 使用にあたっては利用者の自己責任でお願いします ※※※
USBメモリに以下のpngファイルを置いてください
/games/JP_US_BG.png … 1280 x 720
/games/Acid_C_Btn.png … 200 x 68
※元のpngファイルは、USBメモリの /backup/usr/sony/share/data/images/GR の中にあります)
USBメモリのファイルを、PSC本体へコピーするシェルです
※別途 gpghax が必要です
PSC電源オフ、電源ケーブルを抜いていることを確認
USBメモリを挿す
電源ケーブルを挿し、PSC電源オン
起動直後にブラックアウトします
処理が終わると画面が表示されるので電源を切り電源ケーブルを抜いてUSBメモリを抜いてください
lolhack.sh
#!/bin/bash ### define DB=regional_custom.db BACKUPDIR=/media/backup GAMEDIR=/media/games LOGDIR=/media/log ### get log number LOGCOUNT=1 LOGCOUNT_MAX=999 while [ $LOGCOUNT -le $LOGCOUNT_MAX ] do LOGCOUNTNAME=$(printf %03d $LOGCOUNT) if [ -e $LOGDIR/${LOGCOUNTNAME}_before_ls.txt ]; then LOGCOUNT=`expr $LOGCOUNT + 1` else break fi done LOGCOUNTNAME=$(printf %03d $LOGCOUNT) ### UI Stop sleep 8 echo "UI Stop" >> /media/messages.txt killall ui_menu sleep 5 ### log(before) COUNT=1 COUNT_MAX=30 while [ $COUNT -le $COUNT_MAX ] do if [ -e /gaadata/$COUNT ]; then echo "/gaadata/$COUNT" >> $LOGDIR/${LOGCOUNTNAME}_before_ls.txt ls -l /gaadata/$COUNT >> $LOGDIR/${LOGCOUNTNAME}_before_ls.txt fi COUNT=`expr $COUNT + 1` done cd / df -h > $LOGDIR/${LOGCOUNTNAME}_before_df.txt sync ### ========== install png (USB -> PSC) ======================== mount -o rw,remount / echo "INSTALL PNG (USB -> PSC)" >> /media/messages.txt cp /media/games/JP_US_BG.png /usr/sony/share/data/images/GR/ cp /media/games/Acid_C_Btn.png /usr/sony/share/data/images/GR/ sync ### ============================================================ ### log(after) COUNT=1 COUNT_MAX=30 while [ $COUNT -le $COUNT_MAX ] do if [ -e /gaadata/$COUNT ]; then echo "/gaadata/$COUNT" >> $LOGDIR/${LOGCOUNTNAME}_after_ls.txt ls -l /gaadata/$COUNT >> $LOGDIR/${LOGCOUNTNAME}_after_ls.txt fi COUNT=`expr $COUNT + 1` done cd / find . | sort > $LOGDIR/${LOGCOUNTNAME}_after_find.txt df -h > $LOGDIR/${LOGCOUNTNAME}_after_df.txt sync #UI Start echo "UI Start" >> /media/messages.txt cd /data/AppData/sony/pcsx /usr/sony/bin/ui_menu --power-off-enable echo "cp /data/sony/ui/error.log" >> /media/messages.txt cp -pr /data/sony/ui/error.log /media/error.log sync