【发布时间】:2026-01-02 03:30:02
【问题描述】:
目前,我正在尝试将我的 Bash 脚本转换为 C++ 可执行文件,但我无法使用 sed 命令。
这是我的 Bash 脚本:
unset WIFIMAC
unset BTMAC
# Skip processing if MAC addresses are already written
if [ -f /data/.mac.info -a -f /data/.bt.info ]; then
echo "MAC addresses already found."
fi
# Wait until Samsung's RIL announces MAC addresses
until [ $(expr length "$WIFIMAC") == 17 ]; do
WIFIMAC=`getprop ril.wifi_macaddr`
sleep 1
done
until [ $(expr length "$BTMAC") == 12 ]; do
BTMAC=`getprop ril.bt_macaddr`
sleep 1
done
# Set WiFi MAC address
echo $WIFIMAC >/data/.mac.info
# Convert BT MAC address to proper format
echo $BTMAC | sed 's!^M$!!;s!\-!!g;s!\.!!g;s!\(..\)!\1:!g;s!:$!!' >/data/.bt.info
exit
在这里我尝试将其转换为 C++(我将 cmets 放在 Bash 命令旁边):
# This script will read the MAC addresses from Samsung's RIL.
unset WIFIMAC ---> char wifimac....
unset BTMAC ---> char btmac...
# Skip processing if MAC addresses are already written
if [ -f /data/.mac.info -a -f /data/.bt.info ]; then ----> create file_exist(); function with fd = open... and put a smiply if return block
echo "MAC addresses already found."
fi
# Wait until Samsung's RIL announces MAC addresses
until [ $(expr length "$WIFIMAC") == 17 ]; do -----> while strlen(wifimac) == 17 blah blah blah....
WIFIMAC=`getprop ril.wifi_macaddr` -----> property_get function in cutils.h
sleep 1 -----> mdelay(1) if ım not wrong huh?.....
done
until [ $(expr length "$BTMAC") == 12 ]; do
BTMAC=`getprop ril.bt_macaddr` -----> SAME COMMANDS ABOVE
sleep 1
done
# Set WiFi MAC address
echo $WIFIMAC >/data/.mac.info -----> create write_string_to_path(); function with write(fd, ...)
# Convert BT MAC address to proper format
echo $BTMAC | sed 's!^M$!!;s!\-!!g;s!\.!!g;s!\(..\)!\1:!g;s!:$!!' >/data/.bt.info -----> ********HERE İS THE COMMAND "sed" *********
exit
我对 sed 有一点了解,但我不知道它在这里做什么,因此我不知道 C++ 中的哪个命令做同样的事情。
【问题讨论】:
-
C++ 有一个正则表达式库。您还需要了解什么?
-
这种转换完成了什么?似乎 BASH 是适合这项工作的工具。
-
如果你说明你这样做的原因会有所帮助。如果您只是想制作一个人们无法查看或修改的程序,请搜索
shell wrapper programs。如果您有一个主要工作的c++,除了sed,您可以通过调用exec(...)嵌入您的sed 调用(如果您四处搜索,您会找到一些示例如何执行此操作)。祝你好运。 -
如果您显示输入格式和所需的输出格式可能会更容易,因为不是每个人都理解
sed。 -
在尝试将易碎代码转换为 C++ 代码之前,找出 Bash 脚本无法正常工作的原因可能更明智。
sed脚本实际上是在做一些基本的字符操作,您可以用 C++ 编写代码,这比在字符串上运行sed要方便得多。 IMO,为该任务运行sed将是荒谬的矫枉过正。