Python 文法のポイント

Python を覚える際に、まずは以下のポイントを頭に入れておくとよいと思う。基本的に Java + PHP + Perl といった感じだ。
  • ファイルの拡張子は .py
  • コメントは #
  • 区切り文字は改行
  • 他の言語にみられるブロック {...} はインデント
  • 式や宣言の行の 1行目にの最後にコロン(:)
  • 関数や宣言は def で開始
  • クラス宣言は class で開始
  • ライブラリインポートは import
  • 変数の型宣言はなし(ガーベッジコレクションあり)
  • グローバル変数は PHP みたく global キーワードを付ける
  • 配列は [...]
  • リテラルはダブルクォーテーション(")、その前に u を付ける(u")と unicode を表す
追記: ちなみに、Google の人から今日(2006/11/15)直接聞いた話だが、Google でよく使われるプログラミング言語は、C/C++、Java、Python だそうだ。 Updated: 2006/11/15 Original: 2006/11/14
Python を覚える際に、まずは以下のポイントを頭に入れておくとよいと思う。基本的に Java + PHP + Perl といった感じだ。
  • ファイルの拡張子は .py
  • コメントは #
  • 区切り文字は改行
  • 他の言語にみられるブロック {...} はインデント
  • 式や宣言の行の 1行目にの最後にコロン(:)
  • 関数や宣言は def で開始
  • クラス宣言は class で開始
  • ライブラリインポートは import
  • 変数の型宣言はなし(ガーベッジコレクションあり)
  • グローバル変数は PHP みたく global キーワードを付ける
  • 配列は [...]
  • リテラルはダブルクォーテーション(")、その前に u を付ける(u")と unicode を表す
追記: ちなみに、Google の人から今日(2006/11/15)直接聞いた話だが、Google でよく使われるプログラミング言語は、C/C++、Java、Python だそうだ。 Updated: 2006/11/15 Original: 2006/11/14

C で、バイト列を画面に文字列で表示する方法

ここでは、作成したバイト列(バイナリ)のハッシュ値を表示する方法を考えてみよう。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int i, dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);
    SHA1(b, dlen, hash);
printf("hash: ");
    <strong>for(i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02X", *(hash + i));
    }</strong>
printf("\n");
    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。コンパイルすると a.out というファイルができるから ./a.out [Enter キー] で実行してみよう。
ここでは、作成したバイト列(バイナリ)のハッシュ値を表示する方法を考えてみよう。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int i, dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);
    SHA1(b, dlen, hash);
printf("hash: ");
    <strong>for(i = 0; i < SHA_DIGEST_LENGTH; i++) {
printf("%02X", *(hash + i));
    }</strong>
printf("\n");
    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。コンパイルすると a.out というファイルができるから ./a.out [Enter キー] で実行してみよう。

C で、ハッシュ値を求める方法

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);  //  s を b に dlen 分だけ(すなわち文字列 s を)コピーする。
    SHA1(b, dlen, hash); // b を c 分だけのハッシュ値を hash に求める。

// 処理

    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(int argc, char** argv) {

    unsigned char hash[SHA_DIGEST_LENGTH];
    unsigned char* b;
    unsigned char* s = "string string string";
    int dlen;

    dlen = strlen(s);

    if ((b = (unsigned char *)malloc(dlen)) == NULL) {
        return (-1);
    }

    memcpy(b, s, dlen);  //  s を b に dlen 分だけ(すなわち文字列 s を)コピーする。
    SHA1(b, dlen, hash); // b を c 分だけのハッシュ値を hash に求める。

// 処理

    free(b);
}
上の内容を hashtest.c とかいう名前で保存して、 gcc -lssl hashtest.c とコンパイルすればよい。
Posted on 2006-11-07 by yas |

C で、処理にかかった時間を計る方法

以下の関数を用意して、
#include <sys/time.h>

int cputime()
{
    struct timeval tp;
    void *tzp;

    tzp = NULL;
    gettimeofday(&tp,tzp);

    return tp.tv_sec*1000 + tp.tv_usec/1000;
}
void foo {
    int starttime, endtime
    startime = cputime();

    // 処理

    endtime = cputime();

printf("CPU Time: %d ms\n", endtime - starttime);
}
とすればよい。これで、ミリ秒(ms)の値が得られる。ポイントは gettimeofday という関数を使うこと。
以下の関数を用意して、
#include <sys/time.h>

int cputime()
{
    struct timeval tp;
    void *tzp;

    tzp = NULL;
    gettimeofday(&tp,tzp);

    return tp.tv_sec*1000 + tp.tv_usec/1000;
}
void foo {
    int starttime, endtime
    startime = cputime();

    // 処理

    endtime = cputime();

printf("CPU Time: %d ms\n", endtime - starttime);
}
とすればよい。これで、ミリ秒(ms)の値が得られる。ポイントは gettimeofday という関数を使うこと。