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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みつ
記事: 9
登録日時: 5年前

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

#1

投稿記事 by みつ » 5年前

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];
}
よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 8年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 5年前

str_tarの部分文字列を作っているだけなので、

コード:

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

たいちう
記事: 418
登録日時: 9年前

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

#3

投稿記事 by たいちう » 5年前

書き換えが必要なボリュームが判りませんが、
普通、移植するには両方の言語をある程度は理解している必要があります。

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

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

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


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

みつ
記事: 9
登録日時: 5年前

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

#4

投稿記事 by みつ » 5年前

h2so5さん、たいちうさん、回答ありがとうござます。

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

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 5年前

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

「数値型変数のC言語とC#のnullチェックについて」とあるので、数値型変数をC#らしいコードでクラス化すればスッキリとした実装に出来る可能性が高いです。
nullチェックやら型ごとの変換を振り分ける処理はオーバーロードですっきり片付く問題かも知れません。
※ VB.NETにもクラスのメソッドのオーバーロードがあるはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

naohiro19
記事: 256
登録日時: 9年前
住所: 愛知県

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

#6

投稿記事 by naohiro19 » 5年前

こういう場合はC++/CLIでC/C++ライブラリをラッピングしてC#から使うのは手っ取り早いです。

閉鎖

“C言語何でも質問掲示板” へ戻る