[C++/CLI]Nativeの構造体をラッピングする①
/*
*Native(C言語)での構造体定義
*/
typedef struct tagTEST1
{
int imember;
unsigned long ulmember;
} TEST1;
/*
*C++/CLIでラッピングしたクラス
*/
public ref class M_TEST1
{
private:
TEST1 *st;
public:
M_TEST1()
{
st = new TEST1();
}
~M_TEST1()
{
if (st != NULL)
{
delete st;
st = NULL;
}
}
property int IntMember
{
int get() { return st->imember; }
void set(int value) { st->imember = value; }
}
property unsigned long ULMember
{
unsigned long get() { return st->ulmember; }
void set(unsigned long value) { st->ulmember = value; }
}
};
[CFD]はじめてみた
最近CFDをはじめてみた。
以前FXをやっていたが、リーマンショック付近で強制ロスカットされてからマネーゲームからは遠ざかっていたが、ボーナスを記に資本10万円から遊び感覚でスタートしてみた。
FXとくらべて取引できる銘柄が圧倒的に多いわけだけど、主要で取引する予定なのは以下。
・US30
・JP225
・GOLD
・OIL
で、現状。
■12/14~12/18
+5,547.58(+5.55%)
■累計
+5,547.58(+5.55%)
一回以外全部GOLDでの取引。
ためしにOILで取引してみたら30pipとられた。。。
金は今流れとしては下降に入るか持ち直すかよくわかってないけども、継続して続けていこうと思う。
でも来週は年末ということもあり、動きが怖いので多分やらないかも。

[C#]簡単なBIN2ASCIIテキストボックス
簡単なBIN2ASCIIテキストボックス
バイナリデータのテキスト入力からASCII変換するカスタムテキストボックスのたたき台。
2つのテキストボックスを用意し、一方はASCII表示用、一方はバイナリ文字表示用とした場合。
バイナリ側のテキストをカスタムテキストボックスに渡し、ASCIIで表示させる。
public class AsciiTextBox : TextBox
{
#region 定数
/// <summary>
/// PASTE Windowsメッセージ
/// </summary>
private const int WM_PASTE = 0x302;
#endregion
#region メソッド
/// <summary>
/// コンストラクタ
/// </summary>
public AsciiTextBox()
: base()
{
ImeMode = ImeMode.Disable;
}
/// <summary>
/// HEX文字列→ASCII変換
/// </summary>
/// <param name="binStr"></param>
public void HEX2ASCII(string binStr)
{
Encoding utf8 = Encoding.UTF8;
if (binStr.Length % 2 != 0)
{
// バイナリ文字列が2文字1セットでないとき、最終文字を削る
binStr = binStr.Remove(binStr.Length - 1, 1);
}
// バイト変換
Byte[] bytes = new Byte[binStr.Length / 2];
for (int i = 0; i < binStr.Length / 2; i++)
{
// バイナリ文字2文字で、1文字コードと判定し、配列に格納
string subStr = binStr.Substring(i * 2, 2);
int asciiCode = Convert.ToInt32(subStr, 16);
bytes[i] = (Byte)asciiCode;
}
// ASCII文字列生成
StringBuilder sb = new StringBuilder();
foreach (Byte b in bytes)
{
// 制御コードの時は代替文字を追加する
if (((0x00 <= (int)b) && ((int)b <= 0x1f)) || ((int)b == 0x7F))
{
sb.Append("・");
}
else
{
sb.Append(utf8.GetString(new Byte[] { b }));
}
}
Text = sb.ToString();
}
#region オーバーロード
/// <summary>
/// KeyPressオーバーロード
/// </summary>
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
// ASCII以外の入力を受け付けない
e.Handled = !((0x00 <= (int)e.KeyChar) && ((int)e.KeyChar <= 0x7F));
}
/// <summary>
/// WndProcオーバーロード
/// </summary>
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PASTE)
{
// ペーストを許可しない
return;
}
base.WndProc(ref m);
}
#endregion // オーバーロード
#endregion // メソッド
}
[C]エイトクイーン
#include "NQueen.h"
#define QUEEN_NUM (8)
#define CAN_SET (0)
static void ChangeBoard(int board[QUEEN_NUM][QUEEN_NUM], int i , int j, int d);
static void SetQueen(int queen[QUEEN_NUM], int board[QUEEN_NUM][QUEEN_NUM], int i);
static int s_num;
static void ChangeBoard(int board[QUEEN_NUM][QUEEN_NUM], int i , int j, int d)
{
int k = 0;
int offset = 0;
for (k = 0; k < QUEEN_NUM; k++)
{
board[i][k] += d;
board[k][j] += d;
}
if (i > j)
{
for (k = 0; k < (QUEEN_NUM - (i - j)); k++)
{
board[k + (i - j)][k] += d;
}
}
else
{
for (k = 0; k < (QUEEN_NUM - (j - i)); k++)
{
board[k][k + (j - i)] += d;
}
}
if ((i + j) < QUEEN_NUM)
{
for (k = 0; k <= (i + j); k++)
{
board[(i + j) - k][k] += d;
}
}
else
{
for (k = (i + j - QUEEN_NUM + 1); k < QUEEN_NUM; k++)
{
board[(i + j) - k][k] += d;
}
}
}
static void SetQueen(int queen[QUEEN_NUM], int board[QUEEN_NUM][QUEEN_NUM], int i)
{
int j = 0;
if (i == QUEEN_NUM)
{
/* 解が見つかった */
int i = 0;
int j = 0;
printf("%d 個目\n", s_num++);
for (i = 0; i < QUEEN_NUM; i++)
{
for (j = 0; j < QUEEN_NUM; j++)
{
if (queen[i] == j)
{
printf("o ");
}
else
{
printf("x ");
}
}
printf("\n");
}
printf("\n");
return;
}
for (j = 0; j < QUEEN_NUM; j++)
{
if (board[i][j] == CAN_SET)
{
queen[i] = j;
ChangeBoard(board, i, j, 1);
SetQueen(queen, board, i + 1);
ChangeBoard(board, i, j, -1);
}
}
}
void FindAllPattern(void)
{
int queen[QUEEN_NUM] = {'\0'};
int board[QUEEN_NUM][QUEEN_NUM] = {'\0'};
SetQueen(queen, board, 0);
}