ZIPファイルを作るときにCRC32を算出すると思うのですが、
CRC32の計算方法を教えてください。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

CRCとは巡回冗長検査(じゅんかい・じょうちょう・けんさ)という誤りを検出する方法の1つです。


その他ハッシュ・キーを計算するハッシュ関数としても使うことが出来ます。

今回のCRCは32ビット幅で生成多項式に X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X1 + 1 を利用します。
この生成多項式は CRC32 で使われているものです。

1.CRCタイプ
(1)CRCタイプ(CRC32)
(2)生成多項式(0x04C11DB7)
(3)初期値(0xFFFFFFFF)
(4)出力XOR(0xFFFFFFFF)
(5)入力ビット逆転(なし)
(6)出力ビット逆転(なし)
(7)ビット送り(左送り)

// サンプル
#include <stdio.h>
#include <string.h>
#include <limits.h> // CHAR_BIT

// CRC32のテーブル情報
static unsigned long CRC32Table[ 256 ] = {
0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9,
0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005,
0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD,
0x4C11DB70, 0x48D0C6C7, 0x4593E01E, 0x4152FDA9,
0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75,
0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011,
0x791D4014, 0x7DDC5DA3, 0x709F7B7A, 0x745E66CD,
0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039,
0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5,
0xBE2B5B58, 0xBAEA46EF, 0xB7A96036, 0xB3687D81,
0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D,
0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49,
0xC7361B4C, 0xC3F706FB, 0xCEB42022, 0xCA753D95,
0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1,
0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D,

0x34867077, 0x30476DC0, 0x3D044B19, 0x39C556AE,
0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072,
0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16,
0x018AEB13, 0x054BF6A4, 0x0808D07D, 0x0CC9CDCA,
0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE,
0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02,
0x5E9F46BF, 0x5A5E5B08, 0x571D7DD1, 0x53DC6066,
0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,
0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E,
0xBFA1B04B, 0xBB60ADFC, 0xB6238B25, 0xB2E29692,
0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6,
0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A,
0xE0B41DE7, 0xE4750050, 0xE9362689, 0xEDF73B3E,
0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2,
0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686,
0xD5B88683, 0xD1799B34, 0xDC3ABDED, 0xD8FBA05A,

0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637,
0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB,
0x4F040D56, 0x4BC510E1, 0x46863638, 0x42472B8F,
0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53,
0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47,
0x36194D42, 0x32D850F5, 0x3F9B762C, 0x3B5A6B9B,
0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF,
0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623,
0xF12F560E, 0xF5EE4BB9, 0xF8AD6D60, 0xFC6C70D7,
0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B,
0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F,
0xC423CD6A, 0xC0E2D0DD, 0xCDA1F604, 0xC960EBB3,
0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7,
0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B,
0x9B3660C6, 0x9FF77D71, 0x92B45BA8, 0x9675461F,
0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3,

0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640,
0x4E8EE645, 0x4A4FFBF2, 0x470CDD2B, 0x43CDC09C,
0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8,
0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24,
0x119B4BE9, 0x155A565E, 0x18197087, 0x1CD86D30,
0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC,
0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088,
0x2497D08D, 0x2056CD3A, 0x2D15EBE3, 0x29D4F654,
0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0,
0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C,
0xE3A1CBC1, 0xE760D676, 0xEA23F0AF, 0xEEE2ED18,
0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4,
0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0,
0x9ABC8BD5, 0x9E7D9662, 0x933EB0BB, 0x97FFAD0C,
0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668,
0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4,
};

// メモリのCRC32コードを計算
extern unsigned long getMemCRC32( unsigned long crc32, unsigned const char buff[], size_t size )
{
while ( size != 0 ){
crc32 = CRC32Table[ (crc32 >> (32 - CHAR_BIT)) ^ *buff ] ^ (crc32 << CHAR_BIT);
buff++;
size--;
}
return crc32;
}

// ファイルのCRC32コードを計算
extern unsigned long getFileCRC32( const char file[] )
{
unsigned long crc32 = 0xFFFFFFFF;
char buff[ 10 * 1024 ];
size_t size;
FILE *fp;

if ( (fp = fopen(file,"rb")) != NULL ){
do {
size = fread( buff, 1, sizeof(buff), fp );
crc32 = getMemCRC32( crc32, (unsigned const char *)buff, size );
} while ( size != 0 );

fclose( fp );
}
return crc32 ^ 0xFFFFFFFF;
}

// メイン関数
int main( void )
{
char file[ 256 ];
char *find;

while ( fgets(file,sizeof(file),stdin) != NULL ){
if ( (find = strchr(file,'\n')) != NULL ){
*find = '\0';
}
printf( "0x%08lX⇒%s\n", getFileCRC32(file), file );
}
return 0;
}

試し方:
ファイル名をフルパスで入力します。
またはパイプやリダイレクションを利用して入力させます。
出力は32ビットの16進8桁とフルパス名が標準出力に表示されます。
    • good
    • 0
この回答へのお礼

わかりやすい解説ありがとうございました!

お礼日時:2009/09/28 16:18

私的ZIPファイル研究所


http://www.tnksoft.com/reading/zipfile/nonarc.php
にCのソースがあります
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qバイクの外装の金属部についたサビを落としたいので、ユーザ目線でのオススメのサビ落とし材をお教え願えま

バイクの外装の金属部についたサビを落としたいので、ユーザ目線でのオススメのサビ落とし材をお教え願えませんか?

Aベストアンサー

CRC556吹きかけて真鍮ブラシでこすれば大抵の錆は落ちます。
もっとひどい場合は、錆をワイヤブラシやマイナスドライバでこそぎ落としてからサビチェンジャーなどでサビ層を落とさなければならないかもしれない。

真鍮ブラシもそうですが、クレンザーやピカールは磨き粉なので、柔らかい素材だと傷が残る可能性はあります。

QBCCのbcc32.cfgファイルとilink32.cfgファイルの設定について

この前もBCCのことで質問したものです。
BCC5.5を先日インストールしたのですが、PATH設定プログラムのところで疑問があります。
頼りにしているHPを見ながら設定してます。
それだとbcc32.cfgファイルの設定は
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
となっているのですが、私の場合は
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK"
となっています。

同じくilink32.cfgファイルの設定も
-L"c:\Borland\Bcc55\lib"
となっているのですが、私のは
-L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK"
となっています。
これはこのまま設定してもいいのでしょうか?

このままで設定して一度MS-DOSプロンプトで↓のHPの"hello, world"
(http://homepage1.nifty.com/tyuuki/old/cc/image/bcc_use_4.png)
を試してみたのですが、最後の"test"を入力すると「コマンドまたはファイル名が正しくありません」とでてしまいます。その前までは順調に進みます。

やっぱり設定が違うのでしょうか。
もしくは、MS-DOSプロンプトを起動すると、最初に「コマンドまたはファイル名が正しくありません」と出てしまうのが影響しているのでしょうか。
ちなみにWindows MEを使っています。

初心者の質問なので、長々とわかりにくく書いててすみません。
もし、わかる方がいらっしゃったら教えてください。
よろしくお願いします。

この前もBCCのことで質問したものです。
BCC5.5を先日インストールしたのですが、PATH設定プログラムのところで疑問があります。
頼りにしているHPを見ながら設定してます。
それだとbcc32.cfgファイルの設定は
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
となっているのですが、私の場合は
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK"
となっています。

同じくilink32.cfgファイルの設定も
-L"c:\Borland\Bcc55\lib"
となっているのですが、私...続きを読む

Aベストアンサー

まだ締め切られていないようなのでもう少しだけ付け足します。

>"bcc32 test.cpp"と入力すると、エラーが出て「'test cpp'が見つからない」

これは多分、ソースファイルの名前がtest.cpp.txtとなっていたためですね。ソースファイル名をtest.cppとしておけば解決するはずです。(#2で書いたように、「登録されているファイルの拡張子は表示しない」のチェックを外した状態で作業してください。)

>なんか長々と INDOWS\COMMAND\EBD\AUTOEXEC.BAT って書いてあったので

もともと「C:\WINDOWS\...」などと書かれていたのが書き換わってしまったのだと思います。多分いらないので消してしまってください。

それからMEでのパスの設定ですが、参考URLの「Windows Meの場合」を見てください。JAVAの開発環境でのパスの設定方法を解説したページですが、基本的にはC++ Builderの場合と同じです。「C:\jdk1.3\bin」を「C:\Borland\Bcc55\bin」と読み替えてください。

これで、コンパイラのインストールに関しては問題ないと思います。"hello,world"ができた喜びを忘れないで、がんばってくださいね。

参考URL:http://dennou.gihyo.co.jp/books/4-7741-1057-4/index1.html

まだ締め切られていないようなのでもう少しだけ付け足します。

>"bcc32 test.cpp"と入力すると、エラーが出て「'test cpp'が見つからない」

これは多分、ソースファイルの名前がtest.cpp.txtとなっていたためですね。ソースファイル名をtest.cppとしておけば解決するはずです。(#2で書いたように、「登録されているファイルの拡張子は表示しない」のチェックを外した状態で作業してください。)

>なんか長々と INDOWS\COMMAND\EBD\AUTOEXEC.BAT って書いてあったので

もともと「C:\WINDOWS\...」などと...続きを読む

Qバイクのサビ落としについて

こんにちは。
私の地区は今雪が積もっていてバイクに乗ることが出来ません。
ですので、今のうちにサビたパーツを磨いておこうと思ったのですが、どういったやり方が有りますか?
また、マフラーやミラーなどは外して磨けるのですが、ハンドルポストは外せない状況なので、どうにかして綺麗にしたいのですが、浸けおき出来るようなサビ落としは有るのでしょうか?(浸けおきしてふき取りor水圧で飛ばせるような)

何か良いアイディアやアドバイスがありましたら、是非教えてください。

Aベストアンサー

ミラーやマフラー、ハンドルもそうですが、いわゆる「めっき処理」してある部品は「錆が出た時点で」めっきが侵されているという事を知っておいてください。
つまり「保護膜層」である、めっきの役割が失われてきているという事です。
ですので「保護膜」を、錆を落とした後で着けておかないといけないのですが、いくつかの方法があります。

1、再めっき
これが唯一完全な方法ですが、コストが高いですので一般的ではありません。
2、塗装
クリアー塗装(透明色のスプレー塗料)を吹いておきます。
しかし経年変化でひび割れが発生したりして、再塗装も面倒なのでお勧めしません。
また、マフラーに関しては耐熱用が必要です。
3、ワックスなどを使って、水分を防ぐ。
私はこの方法を使っていました。
錆止め効果は高くありませんが、まめに洗車時などに行う事で、かなり錆の進行が防げました。
先に錆をコンパウンドで取った後に、車体を拭いた後のワックスがけの布でめっき部分を拭くだけです。
特別ワックスを付けて拭き上げないでも良いと思います。

QVC6でCRC64・CRC128が出来るソースを探しています。

VC6でCRC64・CRC128が出来るソースを探しています。
CRC自体がよくわかっていないので、実際に動作させて理解しようとネットでソースを見つけようとしていますが、うまくコンパイルできるものが見つかりませんでした。

通常はCRCに1バイトをわたすもの?が多いのですが、できましたら文字列(長さは可変長)も扱える高速な関数を探しています。

よろしくお願いいたします。

Aベストアンサー

★『CRC32』の精度では駄目なのですか?
・下に 32 ビットですが CRC32 のコードを載せておきます。今後の参考にして下さい。

サンプル:
DWORD GetCRC32( LPCTSTR lpString )
{
 DWORD dwCode = 0xFFFFFFFF;
 int no;
 
 while ( *lpString != '\0' ){
  for ( dwCode ^= (((DWORD)*lpString) << (32 - 8)), no = 0 ; no < 8 ; no++ ){
   if ( dwCode & 0x80000000 ){
    dwCode = ((dwCode << 1) ^ 0x04C11DB7);
   }
   else{
    dwCode <<= 1;
   }
  }
  dwCode = (~dwCode & 0xFFFFFFFF);
 }
 return( dwCode );
}

最後に:
・http://apollo.backplane.com/matt/crc64.html→『18.2 million dataset CRC-64 test & Program source』
・http://www.efg2.com/Lab/Mathematics/CRC.htm→『efg's Mathematics Projects -- CRC Calculator』
・上記のリンクを参考文献としてお使い下さい。
・以上。おわり。

★『CRC32』の精度では駄目なのですか?
・下に 32 ビットですが CRC32 のコードを載せておきます。今後の参考にして下さい。

サンプル:
DWORD GetCRC32( LPCTSTR lpString )
{
 DWORD dwCode = 0xFFFFFFFF;
 int no;
 
 while ( *lpString != '\0' ){
  for ( dwCode ^= (((DWORD)*lpString) << (32 - 8)), no = 0 ; no < 8 ; no++ ){
   if ( dwCode & 0x80000000 ){
    dwCode = ((dwCode << 1) ^ 0x04C11DB7);
   }
   else{
    dwCode <<= 1;
   }
  }
 ...続きを読む

Qステンレスシンクのサビ落とし

お世話になります。
ステンレスシンクのサビ落としについて、良い方法についてご教授頂きたく。

築40年や50年の社宅に入居したのですが、クリーニングされているようでしたが、
ステンレスシンクのサビがあるのが気になっています。
サビの様子ですが、簡単にヤスリで物理的に研磨しても取れないレベルです。
(表面に浮いた程度ではありません。)

また、半分程度は表面に凹凸があるので、物理研磨では取れそうにありません。
何か良い方法はないでしょうか?
アドバイスよろしくお願い致します。

また、もしいろいろな手法でもとれない・ならせないのであれば、ステンフィルム?みたいなものを施工することも考えています。
社宅なので、例えばシンク自体がダメになっていると示すことが出来れば交換してもらえるのですが。。。

Aベストアンサー

おそらく錆びがおとせても穴があいてしまうとおもいます。
(そうすれば、交換してもらえるのでしょうが)
貼れるような場所なら、ステンレスシートがいいと思います。
URLは一例です。
http://www.monotaro.com/g/00007079/

QCRCの計算方法について

色々なサイトを参考にして、自分なりにCRC-ITU-TでCRCを計算する関数を作成しました。
いまいち理解が浅く、そのCRCの値が正しいのか判断できずに困っています。
以下にソースを載せます。
アドバイスを、どうかよろしくお願いします。


unsigned short Crc(unsigned char *Data, unsigned long num)
{
  unsigned short vCrc;    //CRCを計算する変数
  unsigned char vData;
  unsigned long i;
  int j;

  vCrc = 0;
  vData = 0;  //初期化

  for(i = 0; i <= num; i++){
    vData = *(Data+i);  //1byte読み込み
    for(j = 0; j < 8; j++){

      //CRC計算変数がシフトで桁あふれする場合
      if((vCrc & 0x8000) != 0){
        vCrc = vCrc << 1;  //1bitシフト
        vCrc = vCrc ^ 0x1021;  //多項式とXOR
      }
      else{
        vCrc = vCrc << 1;
      }

      if((vData & 0x80) != 0){
        vData = vData << 1;  //データ変数1bitシフト        
        vCrc = vCrc ^ 0x0001;  //CRC計算変数に1をXOR
      }
      else{
        vData = vData << 1;
      }
    }
  }
  return(vCrc);
}

色々なサイトを参考にして、自分なりにCRC-ITU-TでCRCを計算する関数を作成しました。
いまいち理解が浅く、そのCRCの値が正しいのか判断できずに困っています。
以下にソースを載せます。
アドバイスを、どうかよろしくお願いします。


unsigned short Crc(unsigned char *Data, unsigned long num)
{
  unsigned short vCrc;    //CRCを計算する変数
  unsigned char vData;
  unsigned long i;
  int j;

  vCrc = 0;
  vData = 0;  //初期化

  for(i = 0; i <= num; i+...続きを読む

Aベストアンサー

そうなんですか^^ 失礼しました。以下のコードを実行すると boost のライブラリで計算したもの、Ru-LaLaさんのコードで計算したもの、サンプル実装で計算したものを比較すると、Ru-LaLaさんので計算したものだけ値が違うので、Ru-LaLaさんのコードが間違ってる可能性があるような気がします^^;

サンプルコードは、
 http://page.freett.com/seaside/vip/crc/ProgramC1.htm
から取りました。サンプルコードをパクってしまえばいいのでは?(笑)

====
#include <iostream>
#include <boost/crc.hpp>

unsigned short ProgCrc1(unsigned char* Data, unsigned long StartAdr, unsigned long StopAdr)
{ unsigned short vCRC; /*CRCを計算する変数*/
unsigned char vData; /*CRC計算時に1データ読み込む変数*/

/*初期化*/
vCRC = 0;
vData = 0;
/*CRC書き込み位置の初期化*/
*(Data + StopAdr + 1) = 0;
*(Data + StopAdr + 2) = 0;

/*CRC-ITU-Tの計算*/
for(unsigned long Loop1=StartAdr; Loop1<=StopAdr+2; Loop1++) /*CRC書き込み位置までループ*/
{ vData = *(Data + Loop1); /*1Byte読みこみ*/
/*CRC1Byte計算*/
for(char Loop2=0; Loop2<8; Loop2++)
{/*CRC計算変数がシフトで桁あふれするか確認*/
if((vCRC & 0x8000) != 0)
/*桁あふれ有り*/
{ vCRC = vCRC << 1; /*CRC計算変数1Bitシフト*/
vCRC = vCRC ^ 0x1021; /*生成多項式のXOR*/
}
else
/*桁あふれ無し*/
{ vCRC = vCRC << 1; /*CRC計算変数1Bitシフト*/
}

/*データ変数がシフトで桁あふれするか確認*/
if((vData & 0x80) != 0)
/*桁あふれ有り*/
{ vData = vData << 1; /*データ変数1Bitシフト*/
vCRC = vCRC ^ 0x0001; /*CRC計算変数に1XOR*/
}
else
/*桁あふれ無し*/
{ vData = vData << 1; /*データ変数1Bitシフト*/
}
}
}
*(Data + StopAdr + 2) = (unsigned char)(vCRC & 0x00ff); /*CRCの下位書き込み*/
*(Data + StopAdr + 1) = (unsigned char)((vCRC >> 8) & 0x00ff); /*CRCの上位書き込み*/

return(vCRC);
}
unsigned short Crc(unsigned char *Data, unsigned long num)
{
unsigned short vCrc; //CRCを計算する変数
unsigned char vData;
unsigned long i;
int j;

vCrc = 0;
vData = 0; //初期化

for(i = 0; i <= num; i++){
vData = *(Data+i); //1byte読み込み
for(j = 0; j < 8; j++){

//CRC計算変数がシフトで桁あふれする場合
if((vCrc & 0x8000) != 0){
vCrc = vCrc << 1; //1bitシフト
vCrc = vCrc ^ 0x1021; //多項式とXOR
}
else{
vCrc = vCrc << 1;
}

if((vData & 0x80) != 0){
vData = vData << 1; //データ変数1bitシフト
vCrc = vCrc ^ 0x0001; //CRC計算変数に1をXOR
}
else{
vData = vData << 1;
}
}
}
return(vCrc);
}

unsigned short crc_itu_t(unsigned char *data, unsigned long num)
{
boost::crc_basic<16> calc(0x1021);
calc.process_bytes(data, num);
return static_cast<unsigned short>(calc.checksum());
}

int main()
{
unsigned char data[6 + 2] = { 'a', 'b', 'c', 'd', 'e', 'f' };
std::cout << std::showbase << std::hex;
std::cout << crc_itu_t(data, 6) << '\n';
std::cout << Crc(data, 6) << '\n';
std::cout << ProgCrc1(data, 0, 5) << '\n';
std::cout << static_cast<int>(data[6]) << '\n';
std::cout << static_cast<int>(data[7]) << '\n';
}
====
./a.exe
0x3afd
0x58e1
0x3afd
0x3a
0xfd

そうなんですか^^ 失礼しました。以下のコードを実行すると boost のライブラリで計算したもの、Ru-LaLaさんのコードで計算したもの、サンプル実装で計算したものを比較すると、Ru-LaLaさんので計算したものだけ値が違うので、Ru-LaLaさんのコードが間違ってる可能性があるような気がします^^;

サンプルコードは、
 http://page.freett.com/seaside/vip/crc/ProgramC1.htm
から取りました。サンプルコードをパクってしまえばいいのでは?(笑)

====
#include <iostream>
#include <boost/crc.hpp>

...続きを読む

Q自転車のサビ落としについて

ルノーの266クラシックに乗っているのですが
自転車の手入れというものをこれまでした事が無く(この自転車で数台目ですが)

大体いつもサビてペダルを漕ぐとキーキー音がなって周りの視線が痛くなってきた頃合いで
自転車を代えてきていたのですが(成長に伴い自転車のインチを代えるという意味合いでも、2~3年で代えてました)

ずっと5~8000円程度だったので、問題無かったのですが
この自転車はちょっと高めなので手入れをしてもう少し使いたいと思っています。

ただ、手入れをしよう!と思い立ったのが遅すぎるのでサビがひどいです。

チェーンは99%サビがついていて、金属の色が見えるところは一箇所だけです(なんでここだけはサビてないんだろう?って感じです)
他はハンドル付近のネジのところなどです。


先日KURE5-56を購入したので使ってみましたが全く落ちませんでした。

自転車の手入れ等の知識は皆無なのでネットで色々調べたのですが
たぶん落ちなかったのは、噴射した後歯ブラシでこすったからかと…
再度いろいろ調べたら真鍮ブラシがいいと書いてあり、歯ブラシだと柔らかすぎたのかなと…

(ちなみに噴射後5分待っても駄目だったので、その後1時間放置しましたがやっぱり駄目でした。なので歯ブラシが原因かなと思いました)


真鍮ブラシでやれば大丈夫でしょうか?
他アドバイスあったら教えてください。

新たに潤滑油も買おうと思っていますが(5-56はサビ落としにはいいが、新たに油は差したほうがいいというのを何回か見ましたので)
オススメのはありますか?



後、5-56を噴射した後、暇だったので、フレームの部分を水拭きしたのですが、ほこり等の汚れは落ちたのですが
たぶん油汚れ(黒いです)と思われるものは落ちませんでした(水拭きなので…)
(以前公営の駐輪場に入れて、出す際にその自転車スタンドまたは隣の自転車からかなり汚れを受けました。
気付いたところはすぐ拭いたのですが余計広がり(そこで油かな?と思いました)、拭くのを止めたのですが、これはどうしたら落ちるでしょうか?

いろいろ教えてください。

現時点で家にあるのはKURE5-56のみです。
それ以外で必要と思われるものも教えて欲しいです。

ルノーの266クラシックに乗っているのですが
自転車の手入れというものをこれまでした事が無く(この自転車で数台目ですが)

大体いつもサビてペダルを漕ぐとキーキー音がなって周りの視線が痛くなってきた頃合いで
自転車を代えてきていたのですが(成長に伴い自転車のインチを代えるという意味合いでも、2~3年で代えてました)

ずっと5~8000円程度だったので、問題無かったのですが
この自転車はちょっと高めなので手入れをしてもう少し使いたいと思っています。

ただ、手入れをしよう!と思い立ったの...続きを読む

Aベストアンサー

そのチェーンは交換するべきです。
自転車のチェーンというのはキシキシ・キコキコいい始めた所でチェーンオイルを注して使う物なんです。
毎日乗る人だったら3日に1回ぐらいでもおかしくないぐらいの頻度です。
たまに「さあやるぞう」と整備をするよりも、日頃保管中の自転車が雨に当たらないような工夫をするべきです。その方がずっと効果的。
そのチェーンはもう摩耗してしまっているので今更サビを落としても改善しません。油や薬品類を使っても費用が無駄です。
チェーンオイルは自転車屋で買うのがベストですが、ダイソーあたりにも使える物はあるかもしれません。556は向いていません。何も注さないよりははるかにマシですが。
チェーンオイルはオートバイ用・動力機用はダメです、ヘビー過ぎます。
http://www.cb-asahi.co.jp/html/mente-oil.html

チェーンだけ交換ならやってもらっても2000円ぐらいだと思いますが、スプロケット(歯車)も減っていたらもっとお金がかかります。でも替えれば元通りになります。

フレームは自動車用の水あか落としできれいになります。
塗るのはカーワックスが良いです。汚れも付きにくくなる。

メンテナンスのコストをかけても長く乗れるのなら結局無駄が無いように思います。整備不良のまま乗っていても楽しくないし潜在的に危険につながります。

そのチェーンは交換するべきです。
自転車のチェーンというのはキシキシ・キコキコいい始めた所でチェーンオイルを注して使う物なんです。
毎日乗る人だったら3日に1回ぐらいでもおかしくないぐらいの頻度です。
たまに「さあやるぞう」と整備をするよりも、日頃保管中の自転車が雨に当たらないような工夫をするべきです。その方がずっと効果的。
そのチェーンはもう摩耗してしまっているので今更サビを落としても改善しません。油や薬品類を使っても費用が無駄です。
チェーンオイルは自転車屋で買うのがベスト...続きを読む

QCRCの計算でエラー

VisualC++2008でプログラミングしております。簡単なモデムプログラムを作っているのですが、エラー検出で利用するCRCでつまづいています。具体的には、特定のファイルを送信しようとすると常にエラーが発生したと判断され、再送要求をし続けてしまいます。
以前、チェックサムでXORを利用した時も同様なことが発生したので、XORの計算があやしいのかなと感じています。デバッグでは正しく計算されるようなのですが、リリースで実行すると上記のようになります。

どなたかアドバイスを頂ければと思います。よろしくお願いします。

Aベストアンサー

>また,特定のファイルを転送しようとしたときのみこの症状が出ます.そしていつも同じ場所でとまってしまいます.(例:13,447バイトのJPEGファイルを転送しようとすると,2816バイトまでしか転送されない)デバッグではその場所でエラーが出たりすることはありませんでした.

であれば、データを転送する際に、128バイトのデータと、計算したCRCを画面かログファイルに出力してみてはどうでしょう。デバッグとリリースで同じ値になっているかどうか確認できると思います。

果たしてエラーの原因がCRCの計算にあるのか、それとも別の場所にあるのか、まずは絞り込むことが肝心かと思います。

Q前輪のディスクブレーキのサビ落としについて

ディスクのサビは、気にしてないのですが、その少し内側のディスクを止めてあるボルトの外側の2から3センチの部分のサビが、気になっています。あまり傷をつけずに、しかも労力をかけずに、尚且つキレイに落とす方法やケミカル品があれば教えてください。お願いします。

Aベストアンサー

有名所では呉工業のブレークリーンなんかもあります。
(サビ落としできるかは疑問)

ここはやっぱりマイティープロでしょう。
ハードタイプは1缶¥980でホームセンターにあります。

参考URL:http://www.comfalmarts.com/tu_pro/_mtp/mtp_01.html

QCRC計算方法

CRCの生成多項式によるmodulo2計算等については一通り調べて理解したつもりですが、実装するとなるとどうしたものかと止まってしまいます。

実装の要求が
「何バイトあるか不明なデータのCRCを計算する」
(CRC-16にて)
です。
どなたかお知恵を拝借できないものでしょうか。

Aベストアンサー

>何バイトあるか不明なデータ

何バイトであってもいいですが、上限値は決めないと実装
出来ませんね。
それとCRCはバイト単位でなくビット単位で扱います。
3ビットのデータとか49ビットのデータも許されます。

元のデータが何桁有っても余りが16ビット以下になる
までモジュロ2演算を続ければいいのです。

ただ16ビット単位で1ビットずつずらしながらモジュロ演算するので
データ配列をそのままバイトで持つか、1バイトを8バイトに
ばらすかが考えどころです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング