怎么样把一个型如"0123456789ABCDEF0123456789ABCDEF"的字符串拷贝
#defien unit8 str[16];
怎么样把一个型如上面的字符串拷贝上面的str[16]里面去.
unit8 str[16].请指教啊.谢谢了
问题点数:0、回复次数:15Top
1 楼flying_dancing(小混混-_-)回复于 2005-04-01 23:11:59 得分 0
#include <iostream>
#include <string>
using namespace std;
int main()
{
char *s="0123456789abcdef";
char ctr[16];
strcpy(ctr,s);
cout<<ctr<<endl;
system("pause");
return 0;
}Top
2 楼xjp6688(大平/要做必须最好)回复于 2005-04-01 23:14:47 得分 0
也可以用strncpy()Top
3 楼kobefly(科比--网络学习中)回复于 2005-04-01 23:21:59 得分 0
这个你要把16个字节考到16个字节长度的数组中
只能用strncpy
#include <iostream>
#include <cstring>
using namespace std;
#define char unit8
int main()
{
char *s="0123456789abcdef";
uint8 str[16];
strncpy(str,s,16);
system("pause");
return 0;
}
Top
4 楼du51(郁郁思扬)回复于 2005-04-01 23:45:03 得分 0
楼上超强.呵呵.Top
5 楼pcboyxhy(-273.15℃)回复于 2005-04-02 00:14:25 得分 0
如果是字符串
后面加'\0'处理会有很多优势。Top
6 楼xxxdg(学习中)回复于 2005-04-02 00:57:36 得分 0
考虑到连续的字符及重复
定义:第一字节表示起始字符,第二字节表示终止字符,第三字母起始字符,第四字节表示终止字符,
第五表示重复次数,第六字节为0
如果有别的连续字符,可以利用其它字节再考虑上述方法.
void main()
{
str[0]='0';
str[1]='9';
str[2]='A';
str[3]='F';
str[4]=2; // 重复两次
int i;
char c;
for(i=0;i<str[4];i++)
{
for(c=str[0];c<=str[1];c++)
cout<<c<<endl;
for(c=str[2];c<=str[3];c++)
cout<<c<<endl;
}
}
Top
7 楼021850524(吸血鬼牌卫生巾)回复于 2005-04-02 08:54:46 得分 0
strncpy(str,s,16);//这句可能会有些小问题.
strncpy(str, s, n);是只拷贝n-1个字符,然后把第n个字符置0.
相对strcpy来说要安全.Top
8 楼FreeFice(庄鱼)回复于 2005-04-02 11:33:46 得分 0
#include <iostream.h>
class Buf{
int n;
char str[16];
public:
Buf(char *s=0,int Len=0);
char *GetStr(char *s);
void SetStr(char *s,int len);
};
Buf::Buf(char *s,int len)
{
n = len>16?16:len;
for(int i=0;i<n;i++)
str[i] = s[i];
}
char *Buf::GetStr(char *s)
{
for(int i=0;i<n;i++)
s[i] = str[i];
s[n] = '\0';
return s;
}
void Buf::SetStr(char *s,int len)
{
n = len>16?16:len;
for(int i=0;i<n;i++)
str[i] = s[i];
}
int main()
{
char *s = "0123456789ABCDEF0123456789ABCDEF";
char str[80];
Buf buf(s,16);
cout << buf.GetStr(str)<<endl;
return 0;
}
原则上,如果没有额外变量进行参与约束的话,很可能导致指针跑飞的现象,这是c/c++标准运行库源码的一个弊端,这也是建议使用string代替char*的一个主要原因。Top
9 楼FreeFice(庄鱼)回复于 2005-04-02 11:47:44 得分 0
to: flying_dancing() 、 kobefly(科比---开始学习c++!)
麻烦你们将源字符串扩充到"0123456789ABCDEF0123456789ABCDEF"好吗?你们会发现现实与想象会有多么大的不同!Top
10 楼ltc_mouse(野地芳菲)回复于 2005-04-02 13:04:37 得分 0
不清楚楼主的“型如”是什么意思。从字符串特点分析,每个字符数值在0~F,用4Bits存储即可,于是楼主给出的32个字符可以存储在16个字节中。
例如: str[0] = 0x01
str[1] = 0x23
str[2] = 0x45 //此即用3个字节存储了“012345”6个字符Top
11 楼scriptren(路是慢慢走出来的......)回复于 2005-04-02 15:18:27 得分 0
用strcpy(ctr,"123456789abcdef")函数不就行了吗?Top
12 楼crcr(游侠)回复于 2005-04-02 17:04:40 得分 0
include <iostream>
#include <string>
using namespace std;
int main()
{
char *s="0123456789abcdef";
char ctr[16];
strcpy(ctr,s);
cout<<ctr<<endl;
system("pause");
return 0;
}
Top
13 楼tgz501(长夜雨亭)回复于 2005-04-02 17:33:59 得分 0
main()
{
char *s="0123456789abcdef";
char str[16];
strcpy(ctr,s);
printf("%s",str);
}Top
14 楼FreeFice(庄鱼)回复于 2005-04-02 19:47:16 得分 0
ltc_mouse(野地芳菲) 提示得好,楼主该不会要求将16进制字符串改写成字符串吧!
char *source = "0123456789abcdef0123456789abcdef";
char c;
for(int i=0,j=0;i<16;i++,j++){
switch(source[j]){
case '0':case '1':...case '9':c = source[j]-'0';break;
case 'a':...case 'f': c = source[j]-'a'+10;break;
case 'A':...case 'F': c = source[j]-'A'+10;break;}
c<<=4;j++;
switch(source[j]){
case '0':case '1':...case '9':c += source[j]-'0';break;
case 'a':...case 'f': c += source[j]-'a'+10;break;
case 'A':...case 'F': c += source[j]-'A'+10;break;}
str[i] = c;}Top
15 楼mikelearner(初学者)回复于 2005-04-02 20:48:31 得分 0
ltc_mouse(野地芳菲) 说的对,我这个是用到把IPV6的字符串和unit8 str[16]的互转.
应该要用到位操作.Top




