スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Ruby] String.bytesで得たバイト列の配列を文字列に戻す

文字列の各バイトを数値の配列に変換するには,bytesというインスタンスメソッドを使えばよい.
では,bytesの逆関数に当たるメソッドは何だろう.


これが結構分かりにくくて,packメソッドを使うのが正解らしい.

arr.pack('c*') は,『配列のすべての要素を8bit整数とみなし,文字列にpackせよ』という意味…だと思う.

次のプログラムは,文字列をbyte配列に変換し,その後文字列に戻している.


str = "Hoge"
p str
bytes = str.bytes
p bytes
packed = bytes.pack('c*')
p packed
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : Ruby

簡単な低級画像処理をC++でやろう!

opencvなんて潤沢なライブラリに飽きてませんか?中身に興味ありませんか?


という訳で,点の書き換えと読み込み保存しか出来ないような,ローレベルなライブラリで画像処理をやってみましょう.


画像の入出力ライブラリは,以前にC言語のbmp入出力を書いていたので,それをC++14に書き換えました.
https://github.com/buyoh/codeLib/blob/master/cpp/implement/file/bitmap.cpp

外枠はこんな感じです.より多様な形式のファイルを読み込めるように改良するかもしれませんが,編集操作はoperator()のみです.


namespace Img {

    struct RGB {
        uint8_t b;
        uint8_t g;
        uint8_t r;
        RGB(int r, int g, int b) :b(b), g(g), r(r) {}
        RGB(const char* ptr) :b(ptr[0]), g(ptr[1]), r(ptr[2]) {}

        inline uint32_t val() const { return (uint32_t)(r << 16) | (uint32_t)(g << 8) | (uint32_t)(b); }
        inline bool operator==(const RGB& e) const { return b == e.b&&g == e.g&&r == e.r; }
        inline bool operator!=(const RGB& e) const { return b != e.b || g != e.g || r != e.r; }
        inline bool operator <(const RGB& e) const { return val() < e.val(); }
    };

    class Bitmap {
    public:
        int width, height;
        vector<uint8_t> raw;

        Bitmap() {}
        Bitmap(int w, int h) { resize(w, h); }
        void resize(int w, int h) ;

        inline RGB& operator()(int x, int y) { return *(RGB*)(&raw[(y*width + x) * 3]); }
        inline RGB operator()(int x, int y) const { return RGB((const char*)&raw[(y*width + x) * 3]); }

        bool load(const char* filename);
        bool save(const char* filename);
    };
}

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : c++ 画像解析

オイラー閉路を探すアルゴリズム

1年前に書いたオイラー閉路を探すプログラムを見たら%$O(|E|^2)$%だったので,書き直しました.


オイラー閉路とは?


一言で説明すると,始点と終点が一致した一筆書き.


ソースコードはこちら:
https://gist.github.com/buyoh/c585cca480dbcaad5e17e2cbeb89fdae
わかりにくかったらごめんね.


続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : アルゴリズムとデータ構造

cygwin上でrubyでgnuplotを使うメモ

必要になったので.

目標


適当にグラフ書いて,png形式またはeps形式で出力.


続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

[c++] 文字列の末尾を切り捨てる

完全放置だったので,簡単な記事を投下.


string型の文字列sがあって,"abcde"がセットされている.

末尾3文字を切り捨てて,先頭2文字だけを残し,標準出力に表示したい.


で,こういうクソコードを書いてた.
// 前提:using namespace std;

string s = "abcde";
s[2] = 0;
cout << s << endl;

このとき出力されるのは"abde"であり,ostreamはヌル文字\0を検知したからといって停止しない点に注意.

coutの代わりにprintfを使えば望み通りの出力"ab"が得られる.
    string s = "abcde";
s[2] = 0;
printf("%s\n",s.c_str()); // ab



そもそも可読性の事を考えればresizeを使うべきである.

string s = "abcde";
s.resize(2);
cout << s << endl;


テーマ : プログラミング
ジャンル : コンピュータ

tag : c++

ブログ移転のお知らせ
ブログをshonen.hateblo.jpに移転します. 新規の記事はこちらに投稿します.
プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
995位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
199位
アクセスランキングを見る>>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。