简单的转换问题!求指教!

秀小川 2012-09-24 03:28:42

char * DayInfo = "20120924";
char day[4];

怎样转换将上述的日期按照下面的格式放到day数组里面去.
day[0] = 0x16;
day[1] = 0x0C;
day[2] = 0x09;
day[3] = 0x18;
...全文
152 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
秀小川 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

"%02d"告诉系统后面对应的变量大小是sizeof(int)即通常的4(32位系统)字节。
没有现成的方法指定后面对应变量的大小是1个字节。
[/Quote]
原来如此,还有一个问题请教下,情况如下:
现在有8Bit的标志位,假设为0101 1010要用一个字符表示,01011010->0x5a->Z(Z的ascll码值是0x5a)
现在遇到这种情况, 标志位 1000 1010也就是0x8a 这种怎么用一个字符表示?
赵4老师 2012-09-26
  • 打赏
  • 举报
回复
"%02d"告诉系统后面对应的变量大小是sizeof(int)即通常的4(32位系统)字节。
没有现成的方法指定后面对应变量的大小是1个字节。
秀小川 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 2 楼 的回复:
C/C++ code
char * DayInfo = "20120924";
char day[4];
for (int i = 0; i != 4; i++)
{
sscanf_s(DayInfo + 2*i,"%2d",&day[i]);
}


上面这个代码有误!必须纠正为
C/C++ c……
[/Quote]
我浅薄了,真的有错误!!! 提示堆栈溢出,问下赵老师,为什么会溢出?
赵4老师 2012-09-26
  • 打赏
  • 举报
回复
对电脑而言只有二进制字节;对人脑才有字符、数字、字符串、汉字、标志位、小数、数组、指针、句柄、RGBA像素值、点阵字符、矢量字符、3D模型、……
赵4老师 2012-09-26
  • 打赏
  • 举报
回复
//0x8a也是一个字符。
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int i;
int main() {
system("chcp 437 >NUL");
for (i=0;i<256;i++) {
if (i==0 || (7<=i && i<=13)) cprintf(".");
else cprintf("%c",i);
if (i%16==15) cprintf("\r\n");
}
return 0;
}
秀小川 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 2 楼 的回复:
C/C++ code
char * DayInfo = "20120924";
char day[4];
for (int i = 0; i != 4; i++)
{
sscanf_s(DayInfo + 2*i,"%2d",&day[i]);
}


上面这个代码有误!必须纠正为
C/C++ c……
[/Quote]
我调试的结果对着的啊?day[0] = 0x14
赵4老师 2012-09-25
  • 打赏
  • 举报
回复
引用 2 楼 的回复:
    char * DayInfo = "20120924";
char day[4];
for (int i = 0; i != 4; i++)
{
sscanf_s(DayInfo + 2*i,"%2d",&day[i]);
}

上面这个代码有误!必须纠正为
    char * DayInfo = "20120924";
char day[4];
int v;
for (int i = 0; i != 4; i++)
{
sscanf_s(DayInfo + 2*i,"%2d",&v);
day[i]=(char)v;
}

不信的话,请单步调试。
ohayou 2012-09-25
  • 打赏
  • 举报
回复
SSE/SSE2 intrinsics 主流编译器都支持
[Quote=引用 6 楼 的回复:]
这位大哥的程序,有点看不懂啊! 貌似不是C/C++的标准库吧?
[/Quote]
秀小川 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

哼哼
C/C++ code
#include <stdio.h>
#include <emmintrin.h>

using namespace std;

int main()
{
char * DayInfo = "20120924";
char day[4];

__m128i x = _mm_loadl_epi64(reinterpret_cast<const……
[/Quote]
这位大哥的程序,有点看不懂啊! 貌似不是C/C++的标准库吧?
ohayou 2012-09-24
  • 打赏
  • 举报
回复
哼哼
#include <stdio.h>
#include <emmintrin.h>

using namespace std;

int main()
{
char * DayInfo = "20120924";
char day[4];

__m128i x = _mm_loadl_epi64(reinterpret_cast<const __m128i*>(DayInfo));
__m128i y = _mm_set1_epi8(0x0f);
x = _mm_and_si128(x, y);
y = _mm_set1_epi8(0);
x = _mm_unpacklo_epi8(x, y);
y = _mm_set1_epi32(0x0001000a);
x = _mm_madd_epi16(x, y);
x = _mm_packs_epi32(x, x);
x = _mm_packs_epi16(x, x);

*reinterpret_cast<int*>(day) = _mm_cvtsi128_si32(x);


printf("%s --> 0x", DayInfo);
for (int i = 0; i < 4; ++i) printf("%.2x", day[i]);
printf("\n");

return 0;
}
自信男孩 2012-09-24
  • 打赏
  • 举报
回复
这样的问题没有规律,不好定义一个比较具有移植性的函数。所以,你需要确定好条件,定义好了char * DayInfo = "20120924";字符的个数以及字符的格式。
秀小川 2012-09-24
  • 打赏
  • 举报
回复
但是这种方法有点问题,就是DayInfo如果是unsinged char 型的就不可以,不知道有没有什么简洁点的方法!
秀小川 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

day[0] = (DayInfo[0] - '0' ) * 10 + (DayInfo[1] - '0' );
day[1] = (DayInfo[2] - '0' ) * 10 + (DayInfo[3] - '0' );
day[2] = (DayInfo[4] - '0' ) * 10 + (DayInfo[5] - '0' );
day[3] = (DayInfo[6] - '0……
[/Quote]
我找到方法来,不用这么麻烦的!

char * DayInfo = "20120924";
char day[4];
for (int i = 0; i != 4; i++)
{
sscanf_s(DayInfo + 2*i,"%2d",&day[i]);
}
图灵狗 2012-09-24
  • 打赏
  • 举报
回复
day[0] = (DayInfo[0] - '0' ) * 10 + (DayInfo[1] - '0' );
day[1] = (DayInfo[2] - '0' ) * 10 + (DayInfo[3] - '0' );
day[2] = (DayInfo[4] - '0' ) * 10 + (DayInfo[5] - '0' );
day[3] = (DayInfo[6] - '0' ) * 10 + (DayInfo[7] - '0' );

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧