1
文字配列( 'hi \ n'など)をバイナリに変換し、int配列に格納する次のコードがあります。バイナリ変換のCharは突然間違っていますか?
void data_to_binary(char *data){
bit_pos = 0;
int i = 0, j = 0, k = 0;
char mask = 0x80;
for(i = 0; i < sizeof(data); ++i){
if(data[i] != '\0' && data[i] != '\n'){
mask = 0x80;
for(j = 0; j < 8; ++j){
binary_data[bit_pos] = ((data[i] & mask) > 0);
mask >>= 1;
bit_pos++;
}
}
}
}
これは完全に機能しました。私は01101000 01101001こんにちは。私はこのコードについて何も変えずに、最近もう一度実行しました。私は今、01111111 01111111を取得しています....何が起こっているのか分かりません。無関係のコードを手にしながら、ヒープの破損エラーが発生しました。これが原因ですか?まだそれは私のコードに悪影響を及ぼしていますか?
'sizeof(data)'が間違っています。配列のサイズは、ポインターのサイズだけではありません。 'data'がCの文字列(NULで終了)なら' strlen(data) 'を使います。それ以外の場合は、配列の長さを関数に渡す必要があります。 – kaylum
私は残念ながら配列のサイズを知りません。ユーザーは最大1024文字で入力します。そしてそれは2に等しいので、 'hi'の場合、実際には動作します。だから私の問題は解決しません。 –
'strlen?'おそらく?または「n = 0」である。 while(* data)n ++; '? –