#include "StdAfx.h" #include "MyString.h" CMyString::CMyString(void) { } CMyString::~CMyString(void) { } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strpos */ /* 引数 */ /* 入力 | CString strBuff : 検索元の テキスト。 */ /* | CString cstr : 検索テキスト。 */ /* */ /* 戻り値 | 検索された文字位置を返す。 */ /* */ /* 処理内容 | 検索元テキスト中の検索文字列の位置を取得する。 strstr と良く似た関数です。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ int CMyString::strpos(CString strBuff, CString cstr) { int lb ,lc ,i ,ret ; ret = -1 ; lb = strBuff.GetLength(); lc = cstr.GetLength(); for ( i = 0 ; i < (lb -lc + 1) ; i++ ) { if ( strBuff.Mid( i ,lc ) == cstr ) { ret = i ; break ; } } return (ret); } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strlenB */ /* 引数 */ /* 入力 | CString strBuff : 変換元の Unicode 文字列。 */ /* */ /* 戻り値 | int val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から Shift_JIS 文字列に変換した時のサイズ を計算する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ int CMyString::strlenB(CString strBuff) { int byte ,i ,ch ,ln ; ln = strBuff.GetLength() ; byte = 0 ; for ( i = 0 ; i < ln ; i++ ) { ch = strBuff.GetAt( i ); if ( ch < 0x80 ) { byte++ ; } else { byte += 2 ; } } return (byte); } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | getDataValue */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* */ /* 戻り値 | unsigned long val : 変換結果 uint32 */ /* */ /* 処理内容 | CString 文字列から 16進数または10進数を区別して unsigned long に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ unsigned long CMyString::getDataValue(CString strData) { unsigned long val; char *nstop ; if ( ( strpos( strData ,_T( "0x" ) ) >= 0 ) || ( strpos( strData ,_T( "0X" ) ) >= 0 ) ) { val = strtoul( strData ,&nstop ,16 ); } else { val = strtoul( strData ,&nstop ,10 ); } return val; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strcpy */ /* 引数 */ /* 出力 | char * szData : 変換先の Shift_JIS 文字列。 */ /* 入力 | CString strData : 変換元の unicode 文字列。 */ /* */ /* 戻り値 | long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から char 文字列に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ void CMyString::strcpy(char * szData, CString strData) { int i, j, ln, ch, unic[2]; // CString cc; ln = strData.GetLength(); j = 0; for (i = 0; i < ln; i++) { ch = (int)strData.GetAt(i); if (ch < 0x80) { szData[j] = ch; j++; } else { unic[0] = ch; ::Unicode_to_SJIS(1, unic, &szData[j]); // UTF-16 --> Shift_JIS にコード変換 j += 2; } } szData[j] = 0; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strcpy_s */ /* 引数 */ /* 出力 | char * szData : 変換先の Shift_JIS 文字列。 */ /* 入力 | unsigned long SizeInBytes : 変換する上限文字数 */ /* | CString strData : 変換元の unicode 文字列。 */ /* */ /* 戻り値 | long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から char 文字列に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ void CMyString::strcpy_s(char * szData, unsigned long SizeInBytes, CString strData) { int i, ln, ch, unic[2]; // CString cc; unsigned long j ; ln = strData.GetLength(); j = 0; for (i = 0; i < ln; i++) { ch = (int)strData.GetAt(i); if (ch < 0x80) { szData[j] = ch; j++; } else { unic[0] = ch; ::Unicode_to_SJIS(1, unic, &szData[j]); // UTF-16 --> Shift_JIS にコード変換 j += 2; } if (j >= ( SizeInBytes - 1 ) ) { // コピー上限チェック break ; } } szData[j] = 0; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strtoul */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* | char ** EndPtr : 変換後の文字位置 */ /* | int Radix : 進数( Radix ) */ /* */ /* 戻り値 | unsigned long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から Radix を指定し、 unsigned long 整数 に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ unsigned long CMyString::strtoul(CString strData, char ** EndPtr, int Radix) { unsigned long val ; char szData[512] ; strcpy_s( szData ,sizeof(szData) ,strData ) ; val = ::strtoul(szData, EndPtr, Radix); return val ; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strtol */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* | char ** EndPtr : 変換後の文字位置 */ /* | int Radix : 進数( Radix ) */ /* */ /* 戻り値 | long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から Radix を指定し、 long 整数に変換する。*/ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ long CMyString::strtol(CString strData, char ** EndPtr, int Radix) { long val; char szData[512] ; strcpy_s(szData, sizeof(szData), strData); val = ::strtol(szData, EndPtr, Radix); return val; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | atof */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* */ /* 戻り値 | double val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から double 浮動小数点に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ double CMyString::atof(CString strData) { double val; char szData[512]; strcpy_s(szData, sizeof(szData), strData); val = ::atof( szData ); return val; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | atoi */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* */ /* 戻り値 | int val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から int 整数に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ int CMyString::atoi(CString strData) { int val; char szData[512]; strcpy_s(szData, sizeof(szData), strData); val = ::atoi(szData); return val; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | atol */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* */ /* 戻り値 | long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から long 整数に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ long CMyString::atol(CString strData) { long val; char szData[512]; strcpy_s(szData, sizeof(szData), strData); val = ::atol(szData); return val; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | atoll */ /* 引数 */ /* 入力 | CString strData : 変換元の Unicode 文字列。 */ /* */ /* 戻り値 | long long val : 変換結果 int64 */ /* */ /* 処理内容 | CString 文字列から long long 整数に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ long long CMyString::atoll(CString strData) { long long val; char szData[512]; strcpy_s(szData, sizeof(szData), strData); val = ::atoll(szData); return val; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strcpy_utf16 */ /* 引数 */ /* 出力 | char * szData : 変換先の Shift_JIS 文字列。 */ /* 入力 | CString strData : 変換元の unicode 文字列。 */ /* */ /* 戻り値 | long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から char 文字列に変換する。( utf-16 ) */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ unsigned long CMyString::strcpy_utf16(char * szData, CString strData) { int i, ln, ch ; unsigned long j; ln = strData.GetLength(); j = 0; szData[j] = (char)0xff; j++; szData[j] = (char)0xfe; j++; for (i = 0; i < ln; i++) { ch = (int)strData.GetAt(i); szData[j] = ch & 0x00ff; j++; szData[j] = (ch >> 8) & 0x00ff; j++; } szData[j] = 0; return j; } /*------------------------------------------------------------------------*/ /* */ /* 関数名 | strcpy_s */ /* 引数 */ /* 出力 | char * szData : 変換先の Shift_JIS 文字列。 */ /* 入力 | unsigned long SizeInBytes : 変換する上限文字数 */ /* | CString strData : 変換元の unicode 文字列。 */ /* */ /* 戻り値 | long val : 変換結果 int32 */ /* */ /* 処理内容 | CString 文字列から char 文字列に変換する。 */ /* */ /* 制御タイミング | ユーザー関数から呼び出し */ /* */ /* 注意事項 | -- */ /* */ /*------------------------------------------------------------------------*/ unsigned long CMyString::strcpy_utf16_s(char * szData, unsigned long SizeInBytes, CString strData) { int i, ln, ch; unsigned long j; ln = strData.GetLength(); j = 0; szData[j] = (char)0xff; j++; szData[j] = (char)0xfe; j++; for (i = 0; i < ln; i++) { ch = (int)strData.GetAt(i); szData[j] = ch & 0x00ff; j++; szData[j] = (ch >> 8) & 0x00ff; j++; if (j >= (SizeInBytes - 1)) { // コピー上限チェック break; } } szData[j] = 0; return j; }