十六进制转八进制代码心得

最初思路:直接将字符串的十六进制转为八进制。

遇到障碍:

1.如何将十六进制字符串中的每一位字符单独取出??

如果只是取出字符串中的字符,直接将自付款看做数组就行,直接以数组形式取出字符就可以。

2.如何将十六进制成功转化成相对应的八进制??这其中涉及到“进位”的问题,八进制是字符串,这一点的实现没有十进制那样简单。

将十六进制转为十进制,再由十进制转为八进制。十进制转为八进制在依靠“栈”实现起来极其简单。

十六进制直接转为八进制最困难的地方,是无法做到像十进制那样可以依靠“加减乘除”,十六进制作为字符串,限制较多。

网上思路十六进制转为十进制再转为八进制相对来说是比较简单的思路。如果十六进制直接转为八进制就需要字符串转为字符串,相对来说较为麻烦。

编写代码时遇到的问题:

1.取出子字符串

取出子字符串可以用函数strncpy,如果单独从字符串中取出字符可以直接将字符串看做数组取出单个字符。

strncpy:

strncpy(char*dest,constchar*src,size_tn)

strcpy(char*dest,constchar*src)

dest -- 指向用于存储复制内容的目标数组。

src -- 要复制的字符串。

n -- 要从源中复制的字符数。

1.如果要“src+n”可以改变复制子字符串的起始位置,字符串从0开始。

2.strncpy不会对dest追加‘\0’。

会追加\0但是自己实验的时候在字符串过长的时候会有些地方不会追加\0,简单来说就是追加\0这一操作并不完美。

所以无论是否追加\0,自己一定要手动追加。

3.和strcpy一样,strncpy把源字符串的字符复制到目标数组。然而,它总是 正好向dest写入len个字符。如果strlen(src)的值小于len,dest数组就用额外的NUL字节填充到len长度,如果strlen(src)的值大于或等于len,那么只有len个字符被复制到dest中。

4.复制子字符串的时候,如果dest中存在字符串,注意不要覆盖dest中的‘\0’。

※※

1.从源中复制的字符数好像不能低于3,否则复制的子字符串不准确,事实是如此码还是自己编写代码的时候出现的错误??

是strncpy在复制字符串之后,不会对字符串追加\0。(其实是追加的,只是有些情况下追加\0并不全,所以会输出的字符串并不准确)

2.如果对一个字符串多次作为指向存储复制内容的目标数组,进行strncpy复制,内容是叠加?还是覆盖?

直接覆盖

3.strncpy不会对dest追加‘\0’,那么strcpy会追加吗??

strcpy会追加‘\0’但是可能是自己操作不严谨或者其他原因,有的时候、0的追加并不完美。

4.字符串结尾没有‘\0’会有什么影响?为什么复制子字符串的时候n>=3的时候,输出字符串的时候就不会乱码,但是小于3的时候就会有乱码?与‘\0’有关??

\0是字符串的结束标志。有关,因为\0是字符串结束标志。

总体来说,这个代码的实现并不困难。自己编写代码的时候主要是技术知识不牢靠,对于一些函数的了解和运用并不熟练。

课后需要腾出时间了解常用函数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值