C++で16進数・10進数・8進数を変換するには

数値を16進数の文字列に変換する

    std::stringstream ss;
    ss << std::hex << 16777215;
    std::cout << ss.str() << std::endl; //=> ffffff

数値を8進数の文字列に変換する

    std::stringstream ss;
    ss << std::oct << 16777215;
    std::cout << ss.str() << std::endl; //=> 77777777

16進数の文字列を数値に変換する

    int n;
    std::istringstream("ffffff") >> std::hex >> n;
    std::cout << n << std::endl; //=> 16777215

8進数の文字列を数値に変換する

    int n;
    std::istringstream("77777777") >> std::oct >> n;
    std::cout << n << std::endl; //=> 16777215

Delphi/C++Builder 10.1 Berlin Update2のMac用PAServerをダウンロードするには

docwikiの「Mac でのプラットフォーム アシスタントのインストール」にはリンクがありませんが、
Delphi/C++Builder 10.1 Berlin Update2のMac用PAServerは、
次のURLからダウンロードできました。

PNGファイルをWindows/OS X/Android/iPhone/iPad用アイコンのサイズに変更するWebアプリ

PNGファイルをWindows/OS X/Android/iPhone/iPad用アイコンのサイズに変更するWebアプリを作りました。
ひとまず動作するようになったので公開します。

アイコンのサイズはDelphi/C++Builder用になっていますが、他の開発環境でも使えると思います。

すべての処理をJavaScriptで行っています。
サーバーサイドでは処理は一切行っていません。

最新版のChromeとFirefoxで動作します。
IEは動作対象外です。

使い方は画面を見るとわかると思いますが、簡単に説明します。

  1. PNG画像を選択、またはドロップしてアップロードします。
  2. プラットフォームを選択します。
  3. 「Create image files」ボタンを押します。
  4. 「Download image files」ボタンを押します。
  5. ダウンロードしたZIPファイルを展開します。

アプリをインストールしなくても手軽に使えて便利だと思います。

System.DateUtils.MonthsBetweenの不思議な挙動について

Embarcadero Quality PortalのRSP-11694より。

System.DateUtils.MonthsBetween関数は、指定した2つのTDateTime値の間隔が何か月かを返します。

次のコードを実行すると、

uses
  System.DateUtils,
  System.SysUtils;

begin
  WriteLn(MonthsBetween(EncodeDate(2015, 8, 1), EncodeDate(2015, 8, 31)));
  WriteLn(MonthsBetween(EncodeDate(2015, 7, 1), EncodeDate(2015, 8, 31)));
  WriteLn(MonthsBetween(EncodeDate(2015, 6, 1), EncodeDate(2015, 8, 31)));
  WriteLn(MonthsBetween(EncodeDate(2015, 5, 1), EncodeDate(2015, 8, 31)));
  WriteLn(MonthsBetween(EncodeDate(2015, 4, 1), EncodeDate(2015, 8, 31)));
  WriteLn(MonthsBetween(EncodeDate(2015, 3, 1), EncodeDate(2015, 8, 31)));
end.

実行結果はこのようになります。

0
2
2
4
4
6

納得できない結果ですね。

ちなみにExcelのDATEDIF関数(=DATEDIF(A1, B1, “m”))を使うと、こうなります。

2015/8/1 2015/8/31 0
2015/7/1 2015/8/31 1
2015/6/1 2015/8/31 2
2015/5/1 2015/8/31 3
2015/4/1 2015/8/31 4