ページ 11

C言語からC#への書き換えについて

Posted: 2014年4月06日(日) 21:47
by みつ
C言語からC#への書き換えについてですが、
処理内容は記載していませんが、
関数 malloc、memset、memcpyについての書き換えにて
下記のような内容でよいかご教授願います。

コード:

// C言語
int tar_len;
int st_pos;
char* str_tar;
char* data;

data = malloc(tar_len - st_pos + 1);
memset(data,0x00,tar_len - st_pos + 1);
memcpy(data,&str_tar[st_pos],tar_len - st_pos);

// C#に書き換え
int tar_len,
int st_pos;
string  str_tar,
char data;

byte[] data = new byte[tar_len - st_pos + 1];
for(int i = 0;i < tar_len - st_pos + 1;i++)
{
	data[i] = 0x00;
}
for(int i = 0;i < tar_len - st_pos;i++)
{
	data[i] = str_tar[st_pos + i];
}
よろしくお願いします。

Re: C言語からC#への書き換えについて

Posted: 2014年4月06日(日) 22:08
by h2so5
str_tarの部分文字列を作っているだけなので、

コード:

string data = str_tar.Substring(st_pos);
で済むと思います。

Re: C言語からC#への書き換えについて

Posted: 2014年4月06日(日) 22:41
by たいちう
書き換えが必要なボリュームが判りませんが、
普通、移植するには両方の言語をある程度は理解している必要があります。

一連の質問から判断すると、まだプロの仕事として取り組んで良いレベルではないと思います。
(別スレですが、引数のNULLチェックの必要性を理解していないとか)
もう少し、双方の言語を勉強してからにしませんか?

ボリュームがさほどではない場合、せいぜいテストを頑張って下さい。
ボリュームが結構ある場合、このまま取り組むよりも、
一旦中断して基礎を理解する方が絶対近道です。
後で振り返ったときに、中途半端な理解で移植した部分なんて全く信用できません。

不具合がどの程度許容されるかにもよります。
不具合が致命的な場合も選択の余地はありません。
言語を理解せずには、十分なテストも不可能でしょうから。


# アマチュアならば話は別です。試行錯誤も、万一失敗したとしても、財産になるでしょう。

Re: C言語からC#への書き換えについて

Posted: 2014年4月06日(日) 23:22
by みつ
h2so5さん、たいちうさん、回答ありがとうござます。

たいちうのご指摘いてだいたとおり、
プロとして仕事をしていますが今まで主にVB、VB.netをメインに
取り組んでいました。
今回、C言語・C#共に初めてふれる言語で
基本を理解していないまま書き換えを行っています。
(VB.netをやっていたなら時間がかからずにできるはずだと
 言われており、人件不足や作業工数の問題等もありますが・・・)

> 一旦中断して基礎を理解する方が絶対近道です。
> 後で振り返ったときに、中途半端な理解で移植した部分なんて全く信用できません。
工数の短縮にはやはり基礎を理解する方が近道ですね。
ご教授ありがとうございます。

双方の勉強を優先し、再度質問させていただきます。

Re: C言語からC#への書き換えについて

Posted: 2014年4月06日(日) 23:30
by softya(ソフト屋)
たいちうさんの指摘された通り、前回の質問の「数値型変数のC言語とC#のnullチェックについて • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=14895
についても関数の仕様を理解せずに移植しているとしか思えないんで、単純変換すると、とんでも無いバグを内包しますので意図を理解して移植する必要がある訳です。

「数値型変数のC言語とC#のnullチェックについて」とあるので、数値型変数をC#らしいコードでクラス化すればスッキリとした実装に出来る可能性が高いです。
nullチェックやら型ごとの変換を振り分ける処理はオーバーロードですっきり片付く問題かも知れません。
※ VB.NETにもクラスのメソッドのオーバーロードがあるはずです。

Re: C言語からC#への書き換えについて

Posted: 2014年4月07日(月) 20:11
by naohiro19
こういう場合はC++/CLIでC/C++ライブラリをラッピングしてC#から使うのは手っ取り早いです。