16進へするには??

解決


 2007-07-23 11:58:09  No: 27149  IP: 192.*.*.*

IntToHexをつかわずに文字列を16進にしたいのですが・・・
x  y  z→58  59  5A
にしたのです。
コンソールアプリでできればお願いします。

編集 削除
はて?  2007-07-23 12:15:23  No: 27150  IP: 192.*.*.*

>IntToHexをつかわずに
何で使わないの?もしかして、そういう条件の課題とか...
>コンソールアプリでできれば...
変換関数はコンソールアプリもWinアプリも関係ないと思うけど?

編集 削除
 2007-07-23 12:18:37  No: 27151  IP: 192.*.*.*

そういうふうにやってくれといわれたのですが。
知識がなく使わないとわからなくて・・・
procedure  hex2  (c:char);
??
??
??
という感じです・・・

編集 削除
そうなの?  2007-07-23 12:45:11  No: 27152  IP: 192.*.*.*

>そういうふうにやってくれといわれたのですが
もしかして Format関数も使うなと言われたのかい?

編集 削除
deldel  2007-07-23 12:49:39  No: 27153  IP: 192.*.*.*

x  y  z  ってなんですか?

編集 削除
 2007-07-23 13:39:40  No: 27154  IP: 192.*.*.*

abcdefg123+-*/
このテキストファイルを下記のように16進として読み込み
61 62 63 64 65 66 67 
31 32 33 2B 2D 2E 2F
を出力し先ほどの{procedure  hex2}条件を使うとのことです。
難しいでしょうか・・・

編集 削除
うーむ  2007-07-23 13:58:34  No: 27155  IP: 192.*.*.*

出力してからhex2を使うってのが意味不明ですが。
出力するのはできてるの?

編集 削除
 2007-07-23 14:20:11  No: 27156  IP: 192.*.*.*

IntToHexを使えばできてるんですが。
IntToHexの変わりのようなものをつくれといわれ
それができません・・・

編集 削除
 2007-07-23 14:28:10  No: 27157  IP: 192.*.*.*

出力してからではなく使うということです・・・!!

編集 削除
Basser  2007-07-23 14:35:46  No: 27158  IP: 192.*.*.*

変換は下記のような感じで

  procedure hex2(C:Char);
  var
    q, r, n: Byte;
    S: String;
  begin

    S:= '';
    q:= Byte(C);
    repeat
      r:= q mod 16;
      q:= q div 16;
      
      if r >= 10 then n:= 55 else n:= 48;
      S:= Chr(n + r) + S;
    until (q = 0);
    if Length(S) < 2 then S:= '0' + S;

  end;

編集 削除
Basser  2007-07-23 16:30:02  No: 27159  IP: 192.*.*.*

ごめんなさい。もっとシンプルにできますね...

  procedure Hex2(C: Char);

    function _Convert(Value: Byte): Char;
    var
      n: Byte;
    begin
      if (Value >= 10) then n:= 55 else n:= 48;
      Result:= Chr(n + Value);
    end;

  var
    S: String;
  begin
    S:= _Convert(Byte(C) shr 4) + _Convert(Byte(C) and $0F);
  end;

編集 削除
 2007-07-23 21:07:43  No: 27160  IP: 192.*.*.*

近づいたような気がします!!
ただテキストファイルの読み込みがうまくいきません・・・

編集 削除
もしかして  2007-07-23 22:26:36  No: 27161  IP: 192.*.*.*

>近づいたような気がします!!
丸ごと全部教えて欲しいってことかな?

編集 削除
てとりスあしとりス  2007-07-23 23:12:46  No: 27162  IP: 192.*.*.*

>ただテキストファイルの読み込みがうまくいきません
Hex2手続きを文字列を返す関数に変えれば?

編集 削除
形而上  2007-07-24 09:20:23  No: 27163  IP: 192.*.*.*

> ただテキストファイルの読み込みがうまくいきません・・・
どううまくいかないのか書いたら?

編集 削除
あんこ  2007-07-24 14:35:29  No: 27164  IP: 192.*.*.*

ここでこんな質問するってことは、
課題提出が目的ですよね。(自分で答えたいではないでしょ)
その課題内容を正確に教えてくれたら、ソース丸UPしますよ。
小出しにされたんじゃ、答えるほうも無駄に労力を消費しますからね。

編集 削除
 2007-07-24 15:47:18  No: 27165  IP: 192.*.*.*

テキストファイルに
abcdefg123+-*/    
を入っていたと仮定すると
16進2桁で表示する。
61 62 63 64 65 66 67 
31 32 33 2B 2D 2E 2F
がコンソールに出るように
プログラムを作る。
1文字16進2桁で出す部分には
IntToHex関数は使わず、
{procedure  hex2(c:char);}条件
というprocedureを使う。

ということです・・・よろしくお願います。

編集 削除
Basser  2007-07-24 17:02:17  No: 27166  IP: 192.*.*.*

こんな感じかな?

program Project1;
{$APPTYPE CONSOLE}

procedure Hex2(C: Char);

  function _Convert(Value: Byte): Char;
  var
    n: Byte;
  begin
    if (Value >= 10) then n:= 55 else n:= 48;
    Result:= Chr(n + Value);
  end;

begin
  Write(_Convert(Byte(C) shr 4) + _Convert(Byte(C) and $0F));
end;

var
  F: TextFile;
  C: Char;
  I: Integer;
begin
  AssignFile(F, 'Test.txt');
  Reset(F);
  try

    I:= 0;
    while not Eof(F) do
    begin

      Read(F, C);
      Hex2(C);
      Inc(I);

      if (I < 16) then
        Write(#32)
      else
      begin
        Writeln('');
        I:= 0;
      end;

    end;

  finally
    CloseFile(F);
  end;

  Readln;
end.

編集 削除
 2007-07-24 17:48:05  No: 27167  IP: 192.*.*.*

どうもかんげきです・・

編集 削除
 2007-07-25 01:19:20  No: 27168  IP: 192.*.*.*

・・・
読み込むのに1行ごとにとはできますか??

編集 削除
HOta  2007-07-25 07:26:48  No: 27169  IP: 192.*.*.*

できます。
ここまで答えてもらっているのです。ここからは、HELPで見れば解ると思いますよ。過去ログにもあります。プログラムは、考えることですから。やってみて、話からに場合に再度質問すればいかがですか?

編集 削除