

No.3ベストアンサー
- 回答日時:
#2です。
入力文字のサイズと変換結果を格納するサイズを指定して、変換を行いたいように見えましたので、そのように修正しました。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void topack(int len1,char *str1,int len2,char *str2)
{
//len1:入力文字列長
//str1:入力文字
//len2:出力結果長
//str2:出力結果
int s1 = 0;
int i;
char x;
memset(str2,0x00,len2);
for (i=0;i<len2;i++){
s1++;
if (s1 >len1) break;
x = *str1++ & 0x0f;
x = x << 4;
s1++;
if (s1<=len1){
x |= *str1++ &0x0f;
}
*str2++ = x;
}
}
int main()
{
unsigned char out[8];
memset(out,0xff,sizeof(out));
topack(7,"12345679875",4,out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
memset(out,0xff,sizeof(out));
topack(8,"12345678777",3,out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
topack(3,"12345678777",4,out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
return 0;
}

No.2
- 回答日時:
以下は、入力文字列をパックに変換する関数:topackです。
---------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void topack(char *str1,char *str2)
{
//str1:入力文字(終端NULLであること)
//str2:出力結果
int s1 = strlen(str1);
int s2 = (s1+1)/2;
int i;
char x;
for (i=0;i<s2;i++){
x = *str1++ & 0x0f;
x = x << 4;
x |= *str1++ &0x0f;
*str2++ = x;
}
}
int main()
{
unsigned char out[8];
memset(out,0xff,sizeof(out));
topack("1234567",out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
memset(out,0xff,4);
topack("12345678",out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
return 0;
}
---------------------------------

No.1
- 回答日時:
"1234567"という文字列を変換したとき、期待する結果は、次のいずれですか?
1.0x12,0x34,0x56,0x70 の4バイト
2.0x01,0x23,0x45,0x67 の4バイト
3.上記以外(この場合は具体例を提示して下さい)
この回答への補足
返信有難う御座います。
期待している結果は1です。
現在のソースを以下に張ります。
このソースで期待した値が返ってきたので、
一応は解決したのですが、他に方法がありましたら
参考にさせていただきたく思います。
#include <stdlib.h>
#include <string.h>
int func();
char str1[]={'1','2','3','4','5','6','7'};
char str2[4];
int main(void)
{
int val=0;
val = func();
return 0;
}
int func()
{
int j,k=0;
int size1=sizeof(str1);
int size2=sizeof(str2);
for(j=0;j<size1;j++)
{
if(j%2==0)
{
str2[k] = (str1[j] - 0x30) << 4;
}else{
str2[k] = str1[j] | (str1[j] - 0x30);
k++;
}
}
if(size1%2 != 0)
{
str2[size2-1] = str1[size1-1] | 0x03;
}
return atoi(str2);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- Excel(エクセル) VBA 文字列変換と指定した列にある日時データから時間を削除する方法について 2 2022/04/14 15:23
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
1~100までの数字を表示したい
-
一定のスペースを空けて端を揃...
-
1~100までの数字を表示し、か...
-
Javaで改行などが出来ないのです。
-
system.out.printが出力されない
-
flush()とclose()について
-
Tomcatが無応答となる現象が起...
-
System.out.printlnの出力先
-
OpenSSL関数エラーについて
-
Log4jで機能毎に別ファイルへ出...
-
JavaScriptを使ってロト6の当...
-
Eclipseのコンソールを常に表示...
-
switch分が機能しません。
-
テキストエリアで改行する
-
javaのwhile文で九九の表
-
Java 九九の表について
-
ArrayList内HashMapの取得
-
InputStreamはreadが1回しかで...
-
JAVAのServletで、画像表示につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
System.out.printlnの出力先
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
system.out.printが出力されない
-
Javaで改行などが出来ないのです。
-
Tomcatが無応答となる現象が起...
-
1~100までの数字を表示したい
-
一定のスペースを空けて端を揃...
-
InputStreamはreadが1回しかで...
-
Log4Jではログを改行できない?
-
Eclipseのコンソールを常に表示...
-
1~100までの数字を表示し、か...
-
switch分が機能しません。
-
数字文字列をパック10進数に変...
-
javaにおけるCSV出力時の文字コ...
-
tomcatのstdout.logを停止したい。
-
Java 九九の表について
-
VBSエラー"オブジェクト型の変...
-
Java swing エクセル書き込み
おすすめ情報