1

だから私は雑談で文字列を持っています.文字列は「$100xxxxxxZZ」としてTCP / IP接続に出くわします.xは0〜9の数字またはA〜Zの文字であり、ZZは送信者によって計算されたチェックサムです. 文字列を使用して、これが正しいメッセージとチェックサムであることを確認するために、「100xxxxxx」のチェックサムを計算する必要があります。そのため、「$100xxxxxxZZ」から「$」と「ZZ」を削除できるようにする必要があります

「ZZ」を切り捨てる方法はすでに知っています。これが私のコードです。

ValidateMsg: replyWithCheckSum

|newMsg tempMsg|
"removes the 'ZZ' from '$100xxxxxxZZ'  "
tempMsg := replyWithCheckSum copyFrom: 2 to: (replyWithCheckSum size -2).

"CODE TO REMOVE THE '$' AND STORE INTO newMsg"

"compares the 'ZZ' to the checksum calculated from newMsg"
^(self calcCheckSum: newMsg) = (self getCheckSumFromReply: replyWithCheckSum)

TL;DR Visualworks 2.5のsmalltalkで文字列の最初の文字を削除するにはどうすればよいですか(はい、これは古いことを知っています)

4

3 に答える 3

5

あなたは試すことができます

myString allButFirst

(ところで、これはどのコレクションでも機能します)

于 2014-04-07T20:52:48.413 に答える
3

通常の VisualWorks では、#allButFirst: を使用します (関連するメソッド: #allButLast:、#first:、および #last: と同様に機能します)。これらはすべて #copyFrom:to: に関するヘルパー メソッドです。

これらのメソッドが 2.5 にまだ存在しない場合は、簡単に移植することをお勧めします。それらは SequencableCollection に実装されているため、文字列だけでなく、より多くのクラスに適用されます。

それらを移植したくない場合は、#copyFrom:to: をそのまま使用してください。

于 2014-04-08T06:26:55.830 に答える
2

別のアプローチを取ることもできます。

newMsg := tmpMsg copyWithout: $$.

これにより、文字列がコピーされますが、コピー中にすべての $ 文字が除外されます。それはあなたが求めたことをしませんが、あなたが望むことをします。この方法は、VisualWorks 2.5 で機能します。

于 2014-04-12T11:12:05.157 に答える