printfでの16進表示(符号拡張)
ダンプ表示プログラムを書いていて、符号有無とprintfの型変換に引っかかったのでメモ。
■問題
2桁16進数指定なのに上位がF埋めされて、8桁表示される場合がある。
■原因
ファイルから読み込んだバッファをchar型配列に格納していた為。
printfで出力する際にint型に暗黙の型変換され、0x80~0xFFが負数として出力されていた。
■対策
バッファを格納する型をunsigned char型配列に変更。
■詳細
0xFFを格納した際の、charとunsigned charでの動作の違いは下記の通り。
- char型の0xFFは「-1」. printfの第二引数はintなので渡すと上位3バイトがFFFFFFで埋められて「FFFFFFFF」が出力される。
- unsigned char型の0xFFは「255」. printfに渡すと上位3バイトが「000000」で埋められるので「FF」が出力される。
[確認用ソース]
#include <stdio.h> int main() { char c = 0xFF; printf("%02X\r\n", c); unsigned char uc = 0xFF; printf("%02X\r\n", uc); }
[実行結果]
FFFFFFFF FF
stringとStringBuilder
GWのまとまった時間を利用して、C#の基礎を勉強中。
string(System.String)型とSystem.Text.StringBuilder型の性能についてのメモ。
■文字列追加時
string(System.String)型→オブジェクトを再生成
System.Text.StringBuilder型→オブジェクトは再生せず、サイズを拡張
■動作時間確認
<ソース>
using System; using System.Linq; using System.Text; using System.Diagnostics; class Program { static void Main(string[] args) { int N = 100000; Stopwatch sw = new Stopwatch(); //////////////////////////////////////////////// sw.Start(); string str = ""; foreach (int i in Enumerable.Range(0, N)) { str += i.ToString(); } //Console.WriteLine(str); sw.Stop(); Console.WriteLine(sw.Elapsed); //////////////////////////////////////////////// sw.Reset(); //////////////////////////////////////////////// sw.Start(); var strb = new StringBuilder(); foreach (int i in Enumerable.Range(0, N)) { strb.Append(i.ToString()); } //Console.WriteLine(strb); sw.Stop(); Console.WriteLine(sw.Elapsed); //////////////////////////////////////////////// } }
<実行結果>
00:00:54.6094578 00:00:00.0234677
迷走中
目先の結果にとらわれすぎて
何がしたいのか、どうなりたいのかが分からなくなっている。
まわりの期待に応えようとして
自分で自分のハードルを上げて
動きにくくなっている。
原点に立ち戻ろう。
どうなりたいのか。
それに向かって何かする。一日ひとつでも。
それが即何か結果につながるわけでなくても。
続けることに意味がある。
人の話を聞こう。
自分の経験、考えと照らし合わせながらではなく、
その人が何を考えているのかを知ろうとしよう。
走ろう。
本を読もう。
英語に触れよう。
ピアノを弾こう。
7つの習慣の漫画版を読んだ。
少し心が楽になった。
迷って、何か見つけて、突き進んで、でも、気づけばまた迷いの中。
その繰り返し。
だけど、何度も繰り返すことで、徐々に自分をコントロールできるようになるのかな。
動けばいい?
windows APIを使って通信系のプログラムを作成しています。
疑似環境で動いても本番環境で動くかわからない。
RFCで基本的な仕様を確認しながら進めているけれど、
知識/経験がなさ過ぎて、本番環境での品質が保証できるのか。
不安しかない。
既存コードはコーディングスタイルも統一されておらず、
立ち上げの担当者がいないので、設計思想もコードから読み取るしかない状態。
クラス設計、関数設計にかなり悩まされます。
そんな中、先輩から言われた「動けばいい」。
その場は流したけれど、そんな気持ちで作りたくないのが正直なところ。
動くことは最低限。
まだそこが満たされていないので、それが最優先なのはわかっているけれど。
可読性、安全性、メンテナンス性、解析性、、、可能な限り追求したい。
次に誰が改修するかわからないし、
誰にでも理解しやすいものを作りたい。
それにしても、新しい概念を導入するって難しい。
今までは先輩の作った方針に乗っかってきたんだなと実感。
経験が少ないから。そんな言い訳したくない。
調べて考えて、いろんな可能性をイメージする。
今できる最大限のことをするんだ。
初めの一歩
コンピュータが苦手なソフトウェア開発者fu-koの備忘録です。
職場での環境の変化にあたふたしている自分が面白いので、
その思いを何らかの形で残そうと思い、blogという選択をしました。
2年強、同じチームで開発をしてきましたが、
限られた世界で慣れたことをする日々に不安を覚え、
違う世界を見てみたいと希望して別のチームに異動させてもらいました。
案の定、今まで何事もなくできていたことができない、
ちょっとしたメールの返信にものすごく時間がかかる、
そもそも開発力が全然ない、
想定はしていたけれど、無力さを感じる今日この頃。
頭では分かっていて、色々思うところはあるのに、
自分の立場とか、まわりの目が気になって、全然動けない。
わかってしまえば簡単なことなのに、適切な判断ができない。
視野は狭いし、あたふたしているだけ。
どつぼにはまっているのが自分でもわかってるけど、抜け出せない。
でもそんな自分が面白い。
不器用だなと思います。
せっかく得た環境。
失敗を恐れず、発信して、折られて立ち止まっても、いろいろ考えて、
へこむときはとことんへこんで、でもまた立ち上がって、、、
この機会にとことんもがこう。
いい人に囲まれています。
日々勉強になるし、恵まれていると感じます。
変に気を遣うから、逆に気を遣わせてしまうのだろうな。
さて、どうしようか。
アウトプットの生産性をあげよう。細かいことは気にしすぎない。大抵のことは取り戻せるのだから。
いったん立ち止まろう。でも足踏みしすぎない。違う視点で考える。意図を読み取る。いったん考えたら腹をくくる。
自分をもっと出そう。どうみられるかなんて後からついてくるもの。考えたって仕方ない。動いてから考えよう。
何もできない自分が自分なんだろうな。
できない自分を認めよう。
できないことの方が多いんだから。
明日はどんな自分に出会うのだろう。
楽しみだ。