16進へするには??

解決


  2007-07-23 20:58:09  No: 27149

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


はて?  2007-07-23 21:15:23  No: 27150

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


  2007-07-23 21:18:37  No: 27151

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


そうなの?  2007-07-23 21:45:11  No: 27152

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


deldel  2007-07-23 21:49:39  No: 27153

x  y  z  ってなんですか?


  2007-07-23 22:39:40  No: 27154

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


うーむ  2007-07-23 22:58:34  No: 27155

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


  2007-07-23 23:20:11  No: 27156

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


  2007-07-23 23:28:10  No: 27157

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


Basser  2007-07-23 23:35:46  No: 27158

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

  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-24 01:30:02  No: 27159

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

  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-24 06:07:43  No: 27160

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


もしかして  2007-07-24 07:26:36  No: 27161

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


てとりスあしとりス  2007-07-24 08:12:46  No: 27162

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


形而上  2007-07-24 18:20:23  No: 27163

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


あんこ  2007-07-24 23:35:29  No: 27164

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


  2007-07-25 00:47:18  No: 27165

テキストファイルに
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-25 02:02:17  No: 27166

こんな感じかな?

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-25 02:48:05  No: 27167

どうもかんげきです・・


  2007-07-25 10:19:20  No: 27168

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


HOta  2007-07-25 16:26:48  No: 27169

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加