如何将两个8位数拼接成一个16位的数

时间:2021-08-21 03:34:05
如何将两个8位数拼接成一个16位的数
我现在正在研究ZigBee 2007协议,需要一个成功的范例。谢谢

34 个解决方案

#1


unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);

#2



unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;

#3


char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);

#4


(a << 8) | b

#5


引用 1 楼 zhao4zhong1 的回复:
unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。

#6


嘎嘎~fff

#7


union c{
char a[2];
short b;
}

#8


引用 5 楼 sholber 的回复:
Quote: 引用 1 楼 zhao4zhong1 的回复:

unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。


还有没有提供移位计算的机器呢?怎么办呢?暂时我想偷懒
留给你解决的了 如何将两个8位数拼接成一个16位的数

#9


U8 x8[2]
x8[0]=lo
x8[1]=hi
U16 *x16=(U16*)x8

不知道看得懂不 可以试试效果

#10


引用 8 楼 my_live_123 的回复:
Quote: 引用 5 楼 sholber 的回复:

Quote: 引用 1 楼 zhao4zhong1 的回复:

unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。


还有没有提供移位计算的机器呢?怎么办呢?暂时我想偷懒
留给你解决的了 如何将两个8位数拼接成一个16位的数

你说得不对,
不对,不对,不对啊,
不对。
字节长度不同,对于在该架构上实现C,没有任何影响,没有,没有的。没有的么。
有些计算机架构,
对于实现C语言困难重重,这是高难度计算机。也没办法,
再说,
赵4老湿曾说,没有
没有移位的计算机,
赵4老湿,你来反驳他!你来!
来!
嘎嘎~~

#11


引用 10 楼 sholber 的回复:
Quote: 引用 8 楼 my_live_123 的回复:

Quote: 引用 5 楼 sholber 的回复:

Quote: 引用 1 楼 zhao4zhong1 的回复:

unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。


还有没有提供移位计算的机器呢?怎么办呢?暂时我想偷懒
留给你解决的了 如何将两个8位数拼接成一个16位的数

你说得不对,
不对,不对,不对啊,
不对。
字节长度不同,对于在该架构上实现C,没有任何影响,没有,没有的。没有的么。
有些计算机架构,
对于实现C语言困难重重,这是高难度计算机。也没办法,
再说,
赵4老湿曾说,没有
没有移位的计算机,
赵4老湿,你来反驳他!你来!
来!
嘎嘎~~


安全起见,一般会选择与上一个位掩码

现代计算机架构应该是没有没有移位计算的机器,但是“古代”计算机就不一定喽!

#12


一个字节不是8位的计算机现在只存在历史和某些ID的想象中。

#13



我会说某ID见识短,孤陋寡闻吗?
即使全世界只有一台这样的计算机,而且拥有C的实现,你就说一字节是八位,也是极不负责任的胡说。这些家伙幸亏不是WG14的成员。这种认识比无知更恶劣。因为少,就可以视而不见吗?我只能说,x86和Windows蒙蔽了你的双眼。
C标准相比于其它语言标准,可以说,是唯一一个没有被实现绑架的。
字符编码里有个术语叫“八位元”,如果按你们的想法,干脆叫字节好了---还真有人这么干。

#14


据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

#15


支持zhao4zhong1和sholber(排名 不分先后)
如何将两个8位数拼接成一个16位的数

#16


这是个极具挑战性的问题。

#17


union aType{
unsigned char a[2];
short int b;
}

aType a;

a.a[0]=v1;//一个值
a.a[1]=v2;

short int x=a.b;
这个应该是最有效的拼接了

#18


引用 13 楼 sholber 的回复:
我会说某ID见识短,孤陋寡闻吗?
即使全世界只有一台这样的计算机,而且拥有C的实现,你就说一字节是八位,也是极不负责任的胡说。这些家伙幸亏不是WG14的成员。这种认识比无知更恶劣。因为少,就可以视而不见吗?我只能说,x86和Windows蒙蔽了你的双眼。
C标准相比于其它语言标准,可以说,是唯一一个没有被实现绑架的。
字符编码里有个术语叫“八位元”,如果按你们的想法,干脆叫字节好了---还真有人这么干。


或许这位老兄能举例说出一个不是8位一字节的芯片? 如何将两个8位数拼接成一个16位的数

#19


引用 18 楼 worldy 的回复:
Quote: 引用 13 楼 sholber 的回复:


我会说某ID见识短,孤陋寡闻吗?
即使全世界只有一台这样的计算机,而且拥有C的实现,你就说一字节是八位,也是极不负责任的胡说。这些家伙幸亏不是WG14的成员。这种认识比无知更恶劣。因为少,就可以视而不见吗?我只能说,x86和Windows蒙蔽了你的双眼。
C标准相比于其它语言标准,可以说,是唯一一个没有被实现绑架的。
字符编码里有个术语叫“八位元”,如果按你们的想法,干脆叫字节好了---还真有人这么干。


或许这位老兄能举例说出一个不是8位一字节的芯片? 如何将两个8位数拼接成一个16位的数


尽管绝大多数计算机CHAR_BIT == 8,但仍然有些架构是例外的:
http://computer-programming-forum.com/47-c-language/d1a610bbac942565.htm

PS:
C99 says that CHAR_BIT must be at least 8; POSIX says it must be exactly 8; on Windows it's 8. That's about all the platforms it's worth caring about.

There was a port of gcc for PDP-10 where CHAR_BIT=9:
http://pdp10.nocrew.org/gcc/download/gcc-pdp10-20020611.tar.bz2 

#20


楼主太笼统。
1,怎么拼接?9和9拼接,结果是18呢,还是99,没说;
2,原来的两个8位数是有符号呢,还是没有符号?没说;
3,放不下怎么办?没说。

#21


引用 14 楼 sholber 的回复:
据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数

#22


引用 21 楼 zhao4zhong1 的回复:
Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

#23


我只能说我现在暂时还不知道还有九位这中说法。

#24


一般的电脑表示都是八位,九位甚至更多一般都是在硬件的吧

#25


没有说明字节序,这个要依赖于CPU  最好写个ARCH相关的函数  在不同框架中对该函数进行改写

#26


而且有些ARM 的 cpu是可以调整字节序方式的 不知道下面的对不对。。。

//just  for intel_ia32
uint16_t Compose(uint8_t hi,uint8_t lo)
{
        register uint16_t reval = hi;
        return (reval<<8) | lo; 
}

#27


引用 22 楼 sholber 的回复:
Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。

#28


如果只是将两个8bit的数合并成一个16bit的数,前面的达人们给出的方法都能够实现,只是需要要注意位序的问题,我个人觉得移位然后再按位或比较好,可以避免位序出错。

#29


引用 27 楼 zhao4zhong1 的回复:
Quote: 引用 22 楼 sholber 的回复:

Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。


眼看已经将赵老师逼到墙角,赵老师就地一滚,撒起泼来。
嘎嘎~~

#30


引用 29 楼 sholber 的回复:
Quote: 引用 27 楼 zhao4zhong1 的回复:

Quote: 引用 22 楼 sholber 的回复:

Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。


眼看已经将赵老师逼到墙角,赵老师就地一滚,撒起泼来。
嘎嘎~~

跟我比谁脸皮厚?!你找错对象了。
过去叫“厚颜无耻”;现在叫“心理素质过硬”!
如何将两个8位数拼接成一个16位的数

#31


引用 30 楼 zhao4zhong1 的回复:
Quote: 引用 29 楼 sholber 的回复:

Quote: 引用 27 楼 zhao4zhong1 的回复:

Quote: 引用 22 楼 sholber 的回复:

Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。


眼看已经将赵老师逼到墙角,赵老师就地一滚,撒起泼来。
嘎嘎~~

跟我比谁脸皮厚?!你找错对象了。
过去叫“厚颜无耻”;现在叫“心理素质过硬”!
如何将两个8位数拼接成一个16位的数


赵老湿是哪里人?我回家要是路过的话,一定找你把酒言欢,共论天下大事!
PS:
自打我来CSDN之后,字里行间,就知道赵老湿是个宽厚的人,心想日后必能成为朋友。只是没想到把酒言欢的事是我先提出来,谁脸皮厚?

#32


吾乃天朝人氏,等吃sholber请大餐中。

#33


引用 32 楼 zhao4zhong1 的回复:
吾乃天朝人氏,等吃sholber请大餐中。

朕还是地球人呢,哼哼

#34


get it

#1


unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);

#2



unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;

#3


char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);

#4


(a << 8) | b

#5


引用 1 楼 zhao4zhong1 的回复:
unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。

#6


嘎嘎~fff

#7


union c{
char a[2];
short b;
}

#8


引用 5 楼 sholber 的回复:
Quote: 引用 1 楼 zhao4zhong1 的回复:

unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。


还有没有提供移位计算的机器呢?怎么办呢?暂时我想偷懒
留给你解决的了 如何将两个8位数拼接成一个16位的数

#9


U8 x8[2]
x8[0]=lo
x8[1]=hi
U16 *x16=(U16*)x8

不知道看得懂不 可以试试效果

#10


引用 8 楼 my_live_123 的回复:
Quote: 引用 5 楼 sholber 的回复:

Quote: 引用 1 楼 zhao4zhong1 的回复:

unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。


还有没有提供移位计算的机器呢?怎么办呢?暂时我想偷懒
留给你解决的了 如何将两个8位数拼接成一个16位的数

你说得不对,
不对,不对,不对啊,
不对。
字节长度不同,对于在该架构上实现C,没有任何影响,没有,没有的。没有的么。
有些计算机架构,
对于实现C语言困难重重,这是高难度计算机。也没办法,
再说,
赵4老湿曾说,没有
没有移位的计算机,
赵4老湿,你来反驳他!你来!
来!
嘎嘎~~

#11


引用 10 楼 sholber 的回复:
Quote: 引用 8 楼 my_live_123 的回复:

Quote: 引用 5 楼 sholber 的回复:

Quote: 引用 1 楼 zhao4zhong1 的回复:

unsigned char uc[2]={0x10,0xA0};
unsigned short us1,us2;
unsigned char *p;
p=(unsigned char *)&us1;
p[0]=uc[0];p[1]=uc[1];
p=(unsigned char *)&us2;
p[0]=uc[1];p[1]=uc[0];
printf("%hu(%04hx),%hu(%04hx)\n",us1,us1,us2,us2);


引用 2 楼 a30037338 的回复:

unsigned char hi = 0x15;
unsigned char lo = 0x51;
unsigned short  i = 0;
i |= hi << 8;
i |= lo;



引用 3 楼 henuyx 的回复:
char buf[24]
snprintf(buf, 24, "%d%08d", num1, num2);


引用 4 楼 my_live_123 的回复:
(a << 8) | b


楼主并没有说明他所采用的编译环境和执行环境。
所以,
我想知道,
如果他所采用的C的实现
一个字节是9位,或者更多位(有的机器可以达到18位)
该怎么办?
不要说我钻牛角尖,也不要说没有这样的CPU架构。
我只想说,
你们错了,
这样的机器是有的。


还有没有提供移位计算的机器呢?怎么办呢?暂时我想偷懒
留给你解决的了 如何将两个8位数拼接成一个16位的数

你说得不对,
不对,不对,不对啊,
不对。
字节长度不同,对于在该架构上实现C,没有任何影响,没有,没有的。没有的么。
有些计算机架构,
对于实现C语言困难重重,这是高难度计算机。也没办法,
再说,
赵4老湿曾说,没有
没有移位的计算机,
赵4老湿,你来反驳他!你来!
来!
嘎嘎~~


安全起见,一般会选择与上一个位掩码

现代计算机架构应该是没有没有移位计算的机器,但是“古代”计算机就不一定喽!

#12


一个字节不是8位的计算机现在只存在历史和某些ID的想象中。

#13



我会说某ID见识短,孤陋寡闻吗?
即使全世界只有一台这样的计算机,而且拥有C的实现,你就说一字节是八位,也是极不负责任的胡说。这些家伙幸亏不是WG14的成员。这种认识比无知更恶劣。因为少,就可以视而不见吗?我只能说,x86和Windows蒙蔽了你的双眼。
C标准相比于其它语言标准,可以说,是唯一一个没有被实现绑架的。
字符编码里有个术语叫“八位元”,如果按你们的想法,干脆叫字节好了---还真有人这么干。

#14


据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

#15


支持zhao4zhong1和sholber(排名 不分先后)
如何将两个8位数拼接成一个16位的数

#16


这是个极具挑战性的问题。

#17


union aType{
unsigned char a[2];
short int b;
}

aType a;

a.a[0]=v1;//一个值
a.a[1]=v2;

short int x=a.b;
这个应该是最有效的拼接了

#18


引用 13 楼 sholber 的回复:
我会说某ID见识短,孤陋寡闻吗?
即使全世界只有一台这样的计算机,而且拥有C的实现,你就说一字节是八位,也是极不负责任的胡说。这些家伙幸亏不是WG14的成员。这种认识比无知更恶劣。因为少,就可以视而不见吗?我只能说,x86和Windows蒙蔽了你的双眼。
C标准相比于其它语言标准,可以说,是唯一一个没有被实现绑架的。
字符编码里有个术语叫“八位元”,如果按你们的想法,干脆叫字节好了---还真有人这么干。


或许这位老兄能举例说出一个不是8位一字节的芯片? 如何将两个8位数拼接成一个16位的数

#19


引用 18 楼 worldy 的回复:
Quote: 引用 13 楼 sholber 的回复:


我会说某ID见识短,孤陋寡闻吗?
即使全世界只有一台这样的计算机,而且拥有C的实现,你就说一字节是八位,也是极不负责任的胡说。这些家伙幸亏不是WG14的成员。这种认识比无知更恶劣。因为少,就可以视而不见吗?我只能说,x86和Windows蒙蔽了你的双眼。
C标准相比于其它语言标准,可以说,是唯一一个没有被实现绑架的。
字符编码里有个术语叫“八位元”,如果按你们的想法,干脆叫字节好了---还真有人这么干。


或许这位老兄能举例说出一个不是8位一字节的芯片? 如何将两个8位数拼接成一个16位的数


尽管绝大多数计算机CHAR_BIT == 8,但仍然有些架构是例外的:
http://computer-programming-forum.com/47-c-language/d1a610bbac942565.htm

PS:
C99 says that CHAR_BIT must be at least 8; POSIX says it must be exactly 8; on Windows it's 8. That's about all the platforms it's worth caring about.

There was a port of gcc for PDP-10 where CHAR_BIT=9:
http://pdp10.nocrew.org/gcc/download/gcc-pdp10-20020611.tar.bz2 

#20


楼主太笼统。
1,怎么拼接?9和9拼接,结果是18呢,还是99,没说;
2,原来的两个8位数是有符号呢,还是没有符号?没说;
3,放不下怎么办?没说。

#21


引用 14 楼 sholber 的回复:
据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数

#22


引用 21 楼 zhao4zhong1 的回复:
Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

#23


我只能说我现在暂时还不知道还有九位这中说法。

#24


一般的电脑表示都是八位,九位甚至更多一般都是在硬件的吧

#25


没有说明字节序,这个要依赖于CPU  最好写个ARCH相关的函数  在不同框架中对该函数进行改写

#26


而且有些ARM 的 cpu是可以调整字节序方式的 不知道下面的对不对。。。

//just  for intel_ia32
uint16_t Compose(uint8_t hi,uint8_t lo)
{
        register uint16_t reval = hi;
        return (reval<<8) | lo; 
}

#27


引用 22 楼 sholber 的回复:
Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。

#28


如果只是将两个8bit的数合并成一个16bit的数,前面的达人们给出的方法都能够实现,只是需要要注意位序的问题,我个人觉得移位然后再按位或比较好,可以避免位序出错。

#29


引用 27 楼 zhao4zhong1 的回复:
Quote: 引用 22 楼 sholber 的回复:

Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。


眼看已经将赵老师逼到墙角,赵老师就地一滚,撒起泼来。
嘎嘎~~

#30


引用 29 楼 sholber 的回复:
Quote: 引用 27 楼 zhao4zhong1 的回复:

Quote: 引用 22 楼 sholber 的回复:

Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。


眼看已经将赵老师逼到墙角,赵老师就地一滚,撒起泼来。
嘎嘎~~

跟我比谁脸皮厚?!你找错对象了。
过去叫“厚颜无耻”;现在叫“心理素质过硬”!
如何将两个8位数拼接成一个16位的数

#31


引用 30 楼 zhao4zhong1 的回复:
Quote: 引用 29 楼 sholber 的回复:

Quote: 引用 27 楼 zhao4zhong1 的回复:

Quote: 引用 22 楼 sholber 的回复:

Quote: 引用 21 楼 zhao4zhong1 的回复:

Quote: 引用 14 楼 sholber 的回复:

据我所知,没有任何一个国际标准正式地定义一个字节的比特数,我想,这已经足够说明问题了。

据我所知,没有任何一个国际标准正式地定义一个人的手脚甚至脑袋数,我想,这已经足够说明问题了。
如何将两个8位数拼接成一个16位的数


正因为如此,在用C解决和手有关的问题时,需要考虑有的人是6指。如果不考虑,就会出现问题。做为一个程序爱好者,你认为你在做这个项目时,不考虑有的人是6指或者7指?我不信。

我真的从来没考虑过。


眼看已经将赵老师逼到墙角,赵老师就地一滚,撒起泼来。
嘎嘎~~

跟我比谁脸皮厚?!你找错对象了。
过去叫“厚颜无耻”;现在叫“心理素质过硬”!
如何将两个8位数拼接成一个16位的数


赵老湿是哪里人?我回家要是路过的话,一定找你把酒言欢,共论天下大事!
PS:
自打我来CSDN之后,字里行间,就知道赵老湿是个宽厚的人,心想日后必能成为朋友。只是没想到把酒言欢的事是我先提出来,谁脸皮厚?

#32


吾乃天朝人氏,等吃sholber请大餐中。

#33


引用 32 楼 zhao4zhong1 的回复:
吾乃天朝人氏,等吃sholber请大餐中。

朕还是地球人呢,哼哼

#34


get it