Permalink
Browse files

・文字コード変換関数の切り出し

  • Loading branch information...
bg1bgst333 committed Feb 20, 2017
1 parent ac93145 commit edbbc86dea277a6f575947d6a1fcd7a4559bd5a7
View
Binary file not shown.
@@ -16,11 +16,14 @@ CBinaryFile::CBinaryFile(){
CBinaryFile::~CBinaryFile(){
// メンバ変数の終了処理
ZeroMemory(m_tszFileName, sizeof(TCHAR) * 1024); // ZeroMemoryでm_tszFileNameを0で埋める.
if (m_pByte != NULL) { // NULLでなければ.
delete[] m_pByte; // deleteでm_pByteを解放.
m_pByte = NULL; // m_pByteにNULLをセット.
}
if (m_hFile != NULL) { // NULLでなければ.
Close(); // 閉じる.
Close(); // 閉じる.
m_hFile = NULL; // m_hFileにNULLをセット.
}
}
@@ -59,4 +62,4 @@ BOOL CBinaryFile::Write(BYTE * pBytes, UINT nCount){
// pBytesを書き込む.
return WriteFile(m_hFile, pBytes, nCount, &dwBytes, NULL); // WriteFileでpBytesの内容を書き込む.
}
}
View
Binary file not shown.
View
@@ -14,27 +14,38 @@ CTextFile::~CTextFile(){
// ファイルを書き込むメンバ関数Write.(lpctszTextは変換前のUNICODE文字列.eEncodeTypeで文字コード指定.)
BOOL CTextFile::Write(LPCTSTR lpctszText, EncodeType eEncodeType){
// 文字コードごとに振り分ける.
if (eEncodeType == EncodeType::SHIFT_JIS) { // SHIFT_JISの場合.
// 変数の宣言
int iMultiByteLen; // マルチバイトに変換したときの長さiMultiByteLen.
// 変数の宣言
int iMultiByteLen; // マルチバイトに変換したときの長さiMultiByteLen.
// 文字コード変換.
iMultiByteLen = Encode(&m_pByte, lpctszText, eEncodeType); // EncodeでeEncodeTypeなバイト列に変換.
// 書き込み
return CBinaryFile::Write(m_pByte, iMultiByteLen - 1); // CBinaryFile::Writeでm_pByteを書き込み.
}
// 指定の文字コードのバイト列に変換する関数Encode.(バッファメモリはppBufの指すバッファに内部で割り当てる.)
int CTextFile::Encode(BYTE ** ppBuf, LPCTSTR lpctszText, EncodeType eEncodeType){
// 変数の宣言
int iMultiByteLen; // マルチバイトに変換したときの長さiMultiByteLen.
// Shift_JIS
if (eEncodeType == EncodeType::SHIFT_JIS) { // Shift_JISの場合.
// 文字コード変換(ワイド文字からマルチバイト文字へ変換したときに必要なバッファサイズを求める.)
iMultiByteLen = WideCharToMultiByte(CP_ACP, 0, lpctszText, -1, NULL, 0, NULL, NULL); // WideCharToMultiByteで変換後のバッファサイズを求める.
// バッファを確保.
m_pByte = new BYTE[iMultiByteLen]; // BYTE型配列を生成し, ポインタをm_pByteに格納.
*ppBuf = new BYTE[iMultiByteLen]; // BYTE型配列を生成し, ポインタを*ppBufに格納.
// 文字コード変換(ワイド文字からマルチバイト文字へ.)
WideCharToMultiByte(CP_ACP, 0, lpctszText, -1, (char *)m_pByte, iMultiByteLen, NULL, NULL); // WideCharToMultiByteで変換する.
// 書き込み
return CBinaryFile::Write(m_pByte, iMultiByteLen - 1); // CBinaryFile::Writeでm_pByteを書き込み.
iMultiByteLen = WideCharToMultiByte(CP_ACP, 0, lpctszText, -1, (char *)*ppBuf, iMultiByteLen, NULL, NULL); // WideCharToMultiByteで変換する.
}
// どれにも当てはまらない場合は失敗.
return FALSE; // FALSEを返す.
// iMultiByteLenを返す.
return iMultiByteLen;
}
View
@@ -26,5 +26,6 @@ class CTextFile : public CBinaryFile {
// メンバ関数
BOOL Write(LPCTSTR lpctszText, EncodeType eEncodeType); // ファイルを書き込むメンバ関数Write.(lpctszTextは変換前のUNICODE文字列.eEncodeTypeで文字コード指定.)
int Encode(BYTE **ppBuf, LPCTSTR lpctszText, EncodeType eEncodeType); // 指定の文字コードのバイト列に変換する関数Encode.(バッファメモリはppBufの指すバッファに内部で割り当てる.)
};
View
Binary file not shown.

0 comments on commit edbbc86

Please sign in to comment.