|
표준 바이너리 변환 방식을 사용한다면, 아래와 같은 비트 연산으로 처리하실 수 있습니다. 단, signed 인지 unsigned 변수인지에 따라 값이 틀려지므로, 변환을 하시기 전의 바이너리 숫자 저장 루틴에서의 signed-unsigned 여부를 확인하시기 바랍니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char readcnt[4];
int itValue = 0, itTemp, itTag = 1;
for(itTemp = 0; itTemp < sizeof(readcnt); itTemp ++) {
itValue += readcnt[itTemp] * itTag;
itTag *= 0x0100;
}
ShowMessage(itValue);
}
//---------------------------------------------------------------------------
김영대 님이 쓰신 글 :
: typedef struct board_isam_tag {
: char bunho[5]; /* 게시번호 */
: char id[12]; /* 작성아이디 */
: char name[20]; /* 작성자 이름*/
: char date[10]; /* 작성날짜 */
: char readcnt[4]; /* 조회수 */
: } BOARD_ISAMREC;
:
:
:
: BOARD_ISAMREC board_isamrec;
:
:
: if ((stream = fopen(cOpenDialog->FileName.c_str(), "rb")) == NULL)
: {
: fprintf(stderr, "Cannot open input file.\n");
: }
:
: fread(&board_isamrec, sizeof(board_isamrec)+1, 1, stream);
:
:
: I-SAM 화일로 된걸 포팅하고 있습니다. (유닉스에서 -> 윈도우 실빌더) 문자는 리딩이 잘됩니다. 그런데 문제는 char readcnt[4]; /* 조회수 */ 부분입니다. 아스키형태로 저장된게 아니고 숫자형태로저장되어 있는것 같네요. 원소스에서는 ldlong((char *)&board_isamrec.readcnt) 이런식으로 값을 뽑아냈는데. ldlong가 외부 함수같기는 한데 시빌더에는 제공하지 않는 함수네요.. (char *)&board_isamrec.readcnt 부분도 컴파일 에러나오고 바이러니입출력은 처음이여서 고수님이 많은 조언부탁드립니다. (비트연산자 쓰면 어떻게 될것 같은데.. 머리가 짧아서 ^^)
:
|